Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python日志:如何替换FileHandler的输出文件?_Python_Django_Logging - Fatal编程技术网

python日志:如何替换FileHandler的输出文件?

python日志:如何替换FileHandler的输出文件?,python,django,logging,Python,Django,Logging,这是针对Python2.7的 我有一个Django项目,我使用logging.config.dictConfig(config)来获取作为服务器运行Django应用程序时所需的日志记录。我在mycore.logging中有自己的模块,它在导入时创建一个logger对象。这一切都很棒 然而,Django有独立的“管理命令”,我想将每个管理命令记录到它自己的单独文件中。日志文件名将是管理命令的名称+“.log” 我已经搜索和谷歌搜索了,但没有找到任何这样的例子。真的这么不寻常吗?或者我只是没有找到现

这是针对Python2.7的

我有一个Django项目,我使用
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