【问题标题】:How to log specific level for my loggers, and keep the rest with another level如何为我的记录器记录特定级别,并将其余的保持在另一个级别
【发布时间】:2020-10-08 06:38:19
【问题描述】:

我希望能够在某个级别拥有自己的记录器,但不显示来自其他模块的信息。

我有这些版本:

FORMAT = '[%(asctime)s] {%(name)s:%(lineno)d} %(levelname)s - %(message)s'

def configure_logging():
    # set up logging to console
    console = logging.StreamHandler()
    console.setLevel(logging.DEBUG)
    formatter = logging.Formatter(FORMAT)
    console.setFormatter(formatter)
    logging.getLogger('').addHandler(console)

这个版本,在 DEBUG 上打印所有内容,不仅是我的记录器

FORMAT = '[%(asctime)s] {%(name)s:%(lineno)d} %(levelname)s - %(message)s'

def configure_logging():
    # set up logging to console
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter(FORMAT)
    console.setFormatter(formatter)
    logging.getLogger('').addHandler(console)

此版本在 DEBUG 上不打印任何内容,即使我的记录器配置为 setLevel(logging.DEBUG),并调用 logger.debug('my_message')

所以我尝试在下一个版本中制作不同的控制台处理程序

FORMAT = '[%(asctime)s] {%(name)s:%(lineno)d} %(levelname)s - %(message)s'

def configure_logging():
    # set up logging to console
    root_console = logging.StreamHandler()
    root_console.setLevel(logging.INFO)
    console = logging.StreamHandler()
    console.setLevel(logging.DEBUG)
    formatter = logging.Formatter(FORMAT)
    root_console.setFormatter(formatter)
    console.setFormatter(formatter)
    logging.getLogger('').addHandler(root_console)
    logging.getLogger('my_logger').addHandler(console)

事实证明,现在我实现了我想要的,但是,INFO 消息被记录了两次(我假设每个处理程序一个)...

所以,我想有更好的方法。

作为总结,我想要这样的东西:

  • my_module1.logger1 --> 调试

  • my_module1.logger2 --> 调试

  • my_module2.logger1 --> 调试

  • my_module2.logger2 --> 警告

  • my_module2.logger3 --> 调试

  • REST_OF_LOGS --> 信息

所以我可以这样做(伪代码):

'my_module1'.setLevel(DEBUG)
'my_module2'.setLevel(DEBUG)
'my_module2.logger2'.setLevel(WARNING)
''.setLevel(INFO)

【问题讨论】:

    标签: python python-3.x logging python-logging


    【解决方案1】:

    这只是一个愚蠢的错误。我忘了指定根记录器级别,并且在某些时候,某个库正在某个级别设置它。

    我的新源代码工作如下:

    FORMAT = '[%(asctime)s] {%(name)s:%(lineno)d} %(levelname)s - %(message)s'
    
    def configure_logging():
        console = logging.StreamHandler()
        console.setLevel(logging.DEBUG)
        formatter = logging.Formatter(FORMAT)
        console.setFormatter(formatter)
        logging.getLogger('').setLevel(logging.INFO) # This was the missing line
        logging.getLogger('my_module1').setLevel(logging.DEBUG)
        logging.getLogger('my_module1.internal').setLevel(logging.INFO)
        logging.getLogger('').addHandler(console)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 2018-04-15
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多