2015-11-04 43 views
0

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

我现在有这在我的测试模块:

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

这不可能是真正的代码。 “测试”没有“警告”属性。 'self.warn('Hello World!')'会失败。 –

+0

@PeterWood我的错误:( – nowox

+0

我创建了日志模块,提供我自己的getLogger功能检查“如果不logger.handlers”,并增加了一个控制台处理器的封装模块。所以,你所建议的解决方案应该工作。 –

回答

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