【问题标题】:Python logging strange behaviorPython记录奇怪的行为
【发布时间】:2014-10-06 08:11:00
【问题描述】:

考虑这段代码:

ubuntu_logger = logging.getLogger('ubuntu-logger')

mail_handler = MailHandler()
mail_handler.setLevel(logging.INFO)
ubuntu_logger.addHandler(mail_handler)

filepath = "/home/ubuntu/logs/central.log"
formatter = logging.Formatter('[%(asctime)s - %(name)s - %(levelname)s]: %(message)s')

central_handler = logging.handlers.RotatingFileHandler(
    filename=filepath,
    mode="a+"
)
central_handler.setLevel(logging.DEBUG)
central_handler.setFormatter(formatter)
ubuntu_logger.addHandler(central_handler)

我在 serverutils.logutils 中创建了这个处理程序,这是一个自定义 python 模块。然后,我将它导入到我的守护进程服务脚本中,该脚本由root 用户运行:

from serverutils.logutils import ubuntu_logger as logger, DEFAULT_LOGGING_CONFIG

logger.info('pydaemons launching...')

使用上面的代码,ubuntu_logger 根本什么都不做。更改如下代码后,ubuntu_logger 可以正常工作,除了根记录器:

import logging
from serverutils.logutils import ubuntu_logger as logger, DEFAULT_LOGGING_CONFIG

config = DEFAULT_LOGGING_CONFIG # Fancy format, log level DEBUG
config.update(filename='/home/ubuntu/test.log')

logging.basicConfig(**config)

logging.error('omg, this works')
logger.info('pydaemons launching...')

我错过了什么?

【问题讨论】:

    标签: python ubuntu logging module daemon


    【解决方案1】:

    您需要在ubuntu_logger 上设置日志级别:

    ubuntu_logger.setLevel(logging.DEBUG)
    

    否则它将在根记录器上找到默认设置的WARNING 级别。当您运行logging.basicConfig() 时,您将根记录器的日志级别设置为DEBUG,因此ubuntu_logger 会拾取它并且不再过滤您的INFO 级别日志消息。

    当您调用logger.log() 帮助函数之一(例如logger.info())时,通常会发生记录器检查当前级别是否允许该消息。如果它自己的级别为NOTSET(默认),则查询父日志对象等,直到找到根,默认为WARNING

    如果您在特定记录器上设置了处理程序,您可能想要禁用日志传播:

    ubuntu_logger.propagate = False
    

    否则,根记录器被要求处理日志消息。传播不会影响记录器在什么级别开始发送消息。

    【讨论】:

    • 我会更新问题,看来我看错了方向
    • @Mazyod:如果这样做,请删除 EDIT 标题;我们都可以看到编辑历史,无需在问题本身中将其作为运行评论。 :-)
    • @Mazyod;更新;你从来没有设置过ubuntu_logger的日志级别。
    • 我不敢相信...我认为在处理程序上设置日志级别就足够了。感谢您提供额外的详细信息,它们真的很有用。
    猜你喜欢
    • 2010-10-08
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    相关资源
    最近更新 更多