/ / Какъв е DRY начинът за конфигуриране на различни местоположения на лог файлове за различни настройки? - python, django, logging

Какъв е DRY начинът да конфигурирате различни локални файлове за различни настройки? - питън, джанго, дърводобив

Аз използвам 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"