【问题标题】:Avoid showing logger entries in console避免在控制台中显示记录器条目
【发布时间】:2021-12-28 18:47:47
【问题描述】:

我有一个“基本”日志配置,可以在我的项目中记录到标准输出。

stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)

SERVER_FORMAT = "[%(asctime)s] %(levelname)s [%(name)s:%(filename)s:%(lineno)d] %(message)s"
DATETIME_FORMAT = "%d/%b/%Y %H:%M:%S"

logging.basicConfig(
    level=logging.INFO,
    format=SERVER_FORMAT,
    datefmt=DATETIME_FORMAT,
    handlers=[stream_handler])

我还有另一个记录器user_logger,它不应该打印任何东西。相反,它应该将日志条目存储在一个变量中。

user_logger = logging.getLogger('user_logger')
user_logger.setLevel(logging.INFO)

log_capture_string = io.StringIO()
log_capture_string_handler = logging.StreamHandler(log_capture_string)
log_capture_string_handler.setLevel(logging.INFO)

log_capture_string_handler.setFormatter(logging.Formatter(USER_FORMAT))
user_logger.handlers = [log_capture_string_handler]

问题是当我打电话时:

user_logger.info('This should only be in "log_capture_string"')

它将它打印到控制台。

你知道如何避免这种情况吗?

【问题讨论】:

    标签: python logging python-logging


    【解决方案1】:

    你应该设置user_logger.propagate = Falselogging.propagate docs

    如果计算结果为 false,则日志消息不会传递给祖先记录器的处理程序。

    因此,您的根记录器不会向标准错误发送任何数据。

    这个例子什么都不输出

    import io
    import logging
    
    stream_handler = logging.StreamHandler()
    stream_handler.setLevel(logging.INFO)
    
    SERVER_FORMAT = "[%(asctime)s] %(levelname)s [%(name)s:%(filename)s:%(lineno)d] %(message)s"
    DATETIME_FORMAT = "%d/%b/%Y %H:%M:%S"
    
    logging.basicConfig(
        level=logging.INFO,
        format=SERVER_FORMAT,
        datefmt=DATETIME_FORMAT,
        handlers=[stream_handler])
    
    user_logger = logging.getLogger('user_logger')
    user_logger.propagate = False
    user_logger.setLevel(logging.INFO)
    
    log_capture_string = io.StringIO()
    log_capture_string_handler = logging.StreamHandler(log_capture_string)
    log_capture_string_handler.setLevel(logging.INFO)
    
    log_capture_string_handler.setFormatter(logging.Formatter(SERVER_FORMAT))
    user_logger.handlers = [log_capture_string_handler]
    
    user_logger.info('This should only be in "log_capture_string"')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 2021-09-06
      • 2011-04-19
      • 1970-01-01
      • 2016-09-23
      相关资源
      最近更新 更多