2
這是用於Python 2.7 ....python logging:如何替換FileHandler的輸出文件?
我有一個Django項目,並且我使用logging.config.dictConfig(CONFIG)
來獲取當運行Django應用程序作爲服務器時需要的日誌記錄。我在mycore.logging中擁有自己的模塊,並在導入時創建一個記錄器對象。這非常棒。
但是,Django具有獨立的「管理命令」,我想將每個管理命令記錄到它自己的單獨文件中。日誌文件名稱將是管理命令+「.log」的名稱。
我搜索了谷歌搜索,沒有找到任何這方面的例子。這真的很不尋常嗎?或者我沒有找到現有技術?
我想我知道如何刪除現有的FileHandler,用我想要的輸出文件實例化一個新的文件,並將其作爲處理程序添加到記錄器對象中。
但它似乎是一個笨重的事情要做。任何建議都會受到歡迎。
import logging
import logging.config
from logutils.colorize import ColorizingStreamHandler
from django.conf import settings
class ColorHandler(ColorizingStreamHandler):
def __init__(self, *args, **kwargs):
super(ColorHandler, self).__init__(*args, **kwargs)
self.level_map = {
# Provide your custom coloring information here
logging.DEBUG: (None, 'blue', False),
logging.INFO: (None, 'green', False),
logging.WARNING: (None, 'yellow', False),
logging.ERROR: (None, 'red', False),
logging.CRITICAL: ('red', 'white', True),
}
try:
CONSOLE_LOG_LEVEL = settings.CONSOLE_LOG_LEVEL
except AttributeError as ae:
CONSOLE_LOG_LEVEL = logging.INFO
try:
FILE_LOG_LEVEL = settings.FILE_LOG_LEVEL
except AttributeError as ae:
FILE_LOG_LEVEL = logging.DEBUG
CONFIG = {
'version':1,
'disable_existing_loggers': True,
'handlers':{
'console': {
'()':ColorHandler,
'level': CONSOLE_LOG_LEVEL,
'formatter': 'simplest',
'stream': 'ext://sys.stdout',
},
'file': {
'class': 'logging.handlers.RotatingFileHandler',
'level': FILE_LOG_LEVEL,
'formatter': 'simplest',
'filename': './log-oxfam.txt',
'mode': 'a',
'maxBytes': 10485760,
'backupCount': 5,
},
},
'formatters': {
'simplest': {
'format': '%(levelname)-8s %(message)s',
},
'time_level_message': {
'format': '%(asctime)s %(levelname)-8s %(message)s',
},
'detailed': {
'format': '%(asctime)s %(module)s line:%(lineno)-4d %(levelname)-8s %(message)s',
},
},
'loggers': {
'myDjangoApp': {
'level':'DEBUG',
'handlers':['console', 'file'],
###'handlers':['console'],
},
},
}
logging.config.dictConfig(CONFIG)
logger = logging.getLogger("myDjangoApp")
我的不好。我需要一個Python 2.7的解決方案。我澄清說明如此。 –
在那裏看不到一個簡單的解決方案。你幾乎必須教一個MemoryView去跟沒有Queue的舊線程庫(幸運的是有collections.deque,但是仍然)。我現在記得爲什麼我遷移到3.x雖然:) – Melvyn
我想我不清楚我想要的東西。這裏是一個總結: - 在導入時,我的實用程序代碼實例化一個日誌對象。這就是我需要的。 - 在__main __()時間,在選定的獨立命令中,我想用我的記錄器對象中存在的FileHandler替換爲與原始屬性相同的新FileHandler對象,除了寫入不同的文件。 –