我发现了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())
答案 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