Аз използвам Python "s logging
модул в проект django. Извършвам основната конфигурация за регистриране в моя 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
не присъства в машината за производство. Освен това не изглежда твърде "сух".
Може ли някой да предложи по-добър начин за това?
Отговори:
1 за отговор № 1Защо не поставяте тези изявления в края на settings.py и използвате индикатора DEBUG flal es за развитието?
Нещо като това:
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 за отговор № 2
Намерих едно разумно "DRY" решение, което работеше. Благодарение на Влизане в питон в Django
Вече имам 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"