如何在Python中向模块添加记录器?

时间:2015-11-04 20:45:28

标签: python logging

我发现了logging,我想将它集成到一个类中以供外部使用。这意味着,用户可以选择忽略日志记录功能或将处理程序绑定到它。

我目前在我的测试模块中有这个:

import logging
class Test:
   def __init__(self):
      self.logger = logging.getlogger(__module__ + '.Test')

   def hello(self):
      self.logger.warn('Hello World!')


test = Test()
test.hello()

有了这个,我得到了错误

No handlers could be found for logger

我确实不想将处理程序绑定到此记录器,否则我可能会覆盖父对象的选择。我认为默认处理程序是Nullhandler

在独立模块中集成日志记录功能的正确模式是什么?

当然,一种解决方案是检查是否没有绑定处理程序:

if not len(self.logger): l.addHandler(logging.NullHandler())

1 个答案:

答案 0 :(得分:1)

这是我在我的一个项目中使用的。

def get_logger(log_level,log_name='YourNameGoesHere'):
    logger = logging.getLogger(log_name)
    if not logger.handlers:
        logger.setLevel(log_level)
        ch = logging.StreamHandler()
        ch.setLevel(log_level)
        ch.setFormatter(logging.Formatter(
            '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
        ))
        logger.addHandler(ch)
        logger.propagate = 0
    return logger