python日志:如何替换FileHandler的输出文件?
这是针对Python2.7的 我有一个Django项目,我使用python日志:如何替换FileHandler的输出文件?,python,django,logging,Python,Django,Logging,这是针对Python2.7的 我有一个Django项目,我使用logging.config.dictConfig(config)来获取作为服务器运行Django应用程序时所需的日志记录。我在mycore.logging中有自己的模块,它在导入时创建一个logger对象。这一切都很棒 然而,Django有独立的“管理命令”,我想将每个管理命令记录到它自己的单独文件中。日志文件名将是管理命令的名称+“.log” 我已经搜索和谷歌搜索了,但没有找到任何这样的例子。真的这么不寻常吗?或者我只是没有找到现
logging.config.dictConfig(config)
来获取作为服务器运行Django应用程序时所需的日志记录。我在mycore.logging中有自己的模块,它在导入时创建一个logger对象。这一切都很棒
然而,Django有独立的“管理命令”,我想将每个管理命令记录到它自己的单独文件中。日志文件名将是管理命令的名称+“.log”
我已经搜索和谷歌搜索了,但没有找到任何这样的例子。真的这么不寻常吗?或者我只是没有找到现有技术
我想我知道如何删除现有的FileHandler,用所需的输出文件实例化一个新的FileHandler,并将其作为logger对象上的处理程序添加
但这似乎是一件笨重的事情。欢迎提供任何建议
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")
我会以解决方案为基础。它几乎是唯一一个不与存储设备绑定的设备。您的侦听器可以在运行时决定将内容放在何处。My bad。我需要python 2.7中的解决方案。我澄清了描述,这样说。没有一个简单的解决办法。您几乎必须以某种方式教MemoryView使用没有队列的旧线程库进行线程化(幸运的是有collections.deque,但仍然如此)。我现在还记得为什么我迁移到3.x了:)我想我还不清楚我想要什么。下面是一个摘要:--在导入时,我的实用程序代码实例化一个日志对象。这正是我需要的在_umain__;()时,在选定的独立命令中,我希望(完全)替换logger对象中存在的FileHandler,新FileHandler对象的属性与原始对象相同,只是它写入了不同的文件。@BillTorcaso您可以使用
logutils
项目在Python 2.7下提供QueueHandler
功能-pip安装logutils
。