2009-07-18 69 views
4

我在django項目中使用python的logging模塊。我正在執行我的settings.py文件中的基本日誌記錄配置。像這樣:什麼是DRY方式爲不同的設置配置不同的日誌文件位置?

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

找到一個合理的 「幹」 的解決方案,它的工作。由於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' 
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) 
+0

感謝。 我可以看到你的觀點,但我希望我所有的生產特定設置都在一個地方,而不是分成兩個不同的文件。 此外,由於我導入從我的設置文件到production.py和*的所有內容,然後*重寫DEBUG,LOG_FILENAME最終將指向開發位置。 – 2009-07-18 15:40:37

相關問題