python日志和处理程序使用

python logging and handler usage

我试图理解Python日志记录的工作方式。

我得到它是一个单例实例,适用于整个正在运行的解释器。

我有这个功能:

1
2
3
4
5
6
7
8
9
10
11
12
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

我用这个打电话:

1
2
3
4
5
  console = setup_logging(options)

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

(这是为了准备在不同的地方进行更多的日志记录。)

现在,"console"是一个"logging.logger"实例。它有一个流处理程序。该streamHandler的级别为10(即logging.debug)。但是,该streamHandler似乎无法获取消息,因为只有在console.warning、error或critical处打印到console(console上应该有stderr和stdout)。

所以,很明显我遗漏了日志程序与系统或流处理程序交互的方式。

我的目标是当streamHandler的级别是调试时,所有内容都将打印到控制台,但我还想了解这不起作用的原因。


好的,这里回答了这个问题:记录setlevel,它是如何工作的

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

所以我要做的是将basicconfig默认值设置为debug,而不是警告。然后,如果我想添加另一个只处理警告及以上内容的处理程序,我会这样做,而不是将其保留为默认值。