首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在定义记录器时在线定义处理程序

在定义记录器时在线定义处理程序
EN

Stack Overflow用户
提问于 2015-01-15 21:17:30
回答 1查看 98关注 0票数 0

在下面的示例中,我试图将处理程序RotatingFileHandler(LOGGING_BASE_DIR + 'application.log', maxBytes=5e6, backupCount=10)添加到记录器device中,但得到了错误ValueError: Unable to configure logger 'device': Unable to add handler <logging.handlers.RotatingFileHandler object at 0x1031beb10>: <logging.handlers.RotatingFileHandler object at 0x1031beb10>

我意识到,我将一个处理程序定义为一个字符串,另一个定义为一个处理程序对象,因此这可能是它不能工作的原因。但是,是否有某种方法可以在配置中以行方式定义处理程序,或者是否需要将处理程序本身与console处理程序一起添加到配置中?

代码语言:javascript
复制
LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': True,
    'incremental': False,

    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'debug',
            'stream': sys.stdout
        },
    },

    'loggers': {
        'device': {
            'handlers': [
                'console',
                RotatingFileHandler(LOGGING_BASE_DIR + 'application.log', maxBytes=5e6, backupCount=10),
            ],
            'level': 'DEBUG',
           'propagate': True
        },
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-18 02:45:50

您应该将RotatingFileHandler添加到id console标记的handlers部分的旁边,如日志字典模式详细信息中所述。

但是,如果这个json字典是从一个文件中加载的,那么您将无法使用LOGGING_BASE_DIR + 'application.log'作为文件名,因为没有定义LOGGING_BASE_DIR (并且在这个上下文中不是一个有效的字符串)。在这种情况下,您应该用一个完整和有效的路径名来替换它。如果您正在从python脚本(可能调用logging.config.dictConfig()的相同脚本)中生成此字典,那么您可以使用它,前提是您之前已经定义了LOGGING_BASE_DIR,并且它指向了一个有效的路径。不过,我会使用os.path.join,而不是+

那么,你的字典可能是这样的:

代码语言:javascript
复制
MYDIR = '/tmp/log'
LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': True,
    'incremental': False,

    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'stream': 'ext://sys.stdout'
        },
        'rotatingfile': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(MYDIR, 'application.log'),
            'maxBytes': 5e6,
            'backupCount': 10
        }
    },

    'loggers': {
        'device': {
            'handlers': [
                'console',
                'rotatingfile'
            ],
            'level': 'DEBUG',
           'propagate': True
        },
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27973150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档