如何以DRY方式为不同设置配置不同的日志文件位置?
我在一个Django项目中使用Python的logging
模块。我在settings.py
文件中进行基本的日志配置,差不多是这样的:
import logging
import logging.handlers
logger = logging.getLogger('project_logger')
logger.setLevel(logging.INFO)
LOG_FILENAME = '/path/to/log/file/in/development/environment'
handler = logging.handlers.TimedRotatingFileHandler(LOG_FILENAME, when = 'midnight')
formatter = logging.Formatter(LOG_MSG_FORMAT)
handler.setFormatter(formatter)
logger.addHandler(handler)
我有一个单独的设置文件用于生产环境。这个文件(production.py
)会从settings
中导入所有内容,并覆盖一些选项(比如把DEBUG
设置为False
)。我想在生产环境中使用一个不同的LOG_FILENAME
。我该怎么做呢?我可以在production.py
中重复整个配置部分,但如果/path/to/log/file/in/development/environment
在生产机器上不存在,就会出现问题。而且这样做看起来也不太“干净”。
有没有人能建议一个更好的办法呢?
2 个回答
1
你为什么不把这些语句放在settings.py的最后面,并在开发时使用DEBUG标志呢?
像这样:
import logging
import logging.handlers
logger = logging.getLogger('project_logger')
logger.setLevel(logging.INFO)
[snip]
if DEBUG:
LOG_FILENAME = '/path/to/log/file/in/development/environment'
else:
LOG_FILENAME = '/path/to/log/file/in/production/environment'
handler = logging.handlers.TimedRotatingFileHandler(LOG_FILENAME, when = 'midnight')
formatter = logging.Formatter(LOG_MSG_FORMAT)
handler.setFormatter(formatter)
logger.addHandler(handler)
1
找到了一个相对“干净”的解决方案,效果不错。感谢 Django中的Python日志记录
我现在有一个 log.py 文件,内容大致如下:
import logging, logging.handlers
from django.conf import settings
LOGGING_INITIATED = False
LOGGER_NAME = 'project_logger'
def init_logging():
logger = logging.getLogger(LOGGER_NAME)
logger.setLevel(logging.INFO)
handler = logging.handlers.TimedRotatingFileHandler(settings.LOG_FILENAME, when = 'midnight')
formatter = logging.Formatter(LOG_MSG_FORMAT)
handler.setFormatter(formatter)
logger.addHandler(handler)
if not LOGGING_INITIATED:
LOGGING_INITIATED = True
init_logging()
我的 settings.py
文件现在包含:
LOG_FILENAME = '/path/to/log/file/in/development/environment
而 production.py
文件包含:
from settings import *
LOG_FILENAME = '/path/to/log/file/in/production/environment'