Как СУХОЙ способ настроить различные местоположения файла журнала для разных настроек? - PullRequest
4 голосов
/ 18 июля 2009

Я использую модуль Python 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 отсутствует в рабочей машине. Кроме того, он не выглядит слишком "сухим".

Кто-нибудь может предложить лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 18 июля 2009

Нашел разумно "СУХОЕ" решение, которое сработало. Благодаря входу Python в 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()

My 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'
1 голос
/ 18 июля 2009

Почему бы вам не поместить эти операторы в конец файла 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...