python日志和处理程序使用

时间:2013-04-09 16:46:20

标签: python logging

我正在尝试了解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')

(这是准备更多地记录到不同的地方。)

现在,“console”是一个“logging.Logger”实例。 它有一个StreamHandler。该streamhandler的级别为10(即logging.DEBUG)。 但是,StreamHandler似乎没有获取消息,因为在console.warning,error或critical上只会打印到控制台(应该有stderr和stdout)。

所以,我清楚地忽略了记录器与系统或StreamHandler交互的方式。

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

1 个答案:

答案 0 :(得分:1)

好的,所以在这里回答:logging setLevel, how it works

总结一下:您添加处理程序的记录器需要位于处理程序级别或更低级别,否则记录程序会在将消息传递给处理程序之前拒绝该消息。

所以我要做的就是将basicConfig默认设置为DEBUG,而不是WARNING。如果我想添加另一个仅处理WARNING及以上的处理程序,我会这样做,而不是将其保留为默认值。