2013-04-09 131 views
1

我想了解python日志记录的工作方式。python日志记录和处理程序的使用

我知道这是一个适用于整个正在运行的解释器的单例实例。

我有这样的功能:

def setup_logging(options=None): 
    '''setup the logger and return it''' 
    logging.basicConfig(level=logging.WARNING, 
         format='%(levelname)s: %(message)s', 
         filename='/tmp/pluser.log') 

    logger = logging.getLogger('pluser') 
    console = logging.StreamHandler() 
    console.setLevel(logging.DEBUG) 
    print(console.level) 
    logger.addHandler(console) 
    return logger 

,我称之为使用这样的:

console = setup_logging(options) 

    console.debug('Initializing database') 
    connect_to_db() 
    console.debug('Database initialized') 

(这是做更多的日志记录到不同的地方准备)现在

,“控制台“是一个”logging.Logger“实例。 它有一个StreamHandler。该流处理程序的级别为10(即logging.DEBUG)。 但是,StreamHandler似乎没有得到消息,因为事物只能在console.warning,error或critical中打印到控制台(应该有stderr和stdout)。

因此,我明显错过了记录器与系统或StreamHandler进行交互的方式。

我的目标是当StreamHandler的级别调试时,所有内容都打印到控制台,但我也想知道为什么这不起作用。

+0

我添加了“logging.StreamHandler(sys.stdout),然后它在连续打印3次,如果我做console.warning,但仍然不打印在调试。 – qkslvrwolf 2013-04-09 16:47:23

回答

1

好了,这是在这里找到答案:logging setLevel, how it works

总结:您添加处理程序需要记录器是在您的处理程序或更低的水平,否则以前被传递到记录器拒绝邮件处理程序。

所以我必须做的是将我的basicConfig默认设置为DEBUG,而不是WARNING。如果我然后想添加另一个处理程序,只处理警告和以上,我会这样做,而不是保持默认。

相关问题