代码之家  ›  专栏  ›  技术社区  ›  Manoj Govindan

为不同的设置配置不同日志文件位置的干燥方法是什么?

  •  4
  • Manoj Govindan  · 技术社区  · 15 年前

    我在用蟒蛇的 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 用于生产。我该怎么办?我可以在中重复整个配置部分 生产.Py 但如果 /path/to/log/file/in/development/environment 不在生产机器中。此外,它看起来不太“干”。

    有人能提出一个更好的方法来解决这个问题吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Martin Thurau    15 年前

    为什么不把这些语句放在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)
    
        2
  •  1
  •   Community Mofi    7 年前

    找到一个合理的“干燥”的解决方案。多亏了 Python logging in 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'