无论级别设置如何,如何始终将日志消息写入文件

时间:2014-06-09 13:43:07

标签: python logging

我目前在我的脚本中使用日志记录模块实现了一个安静模式,如下所示:

quiet = False # set quiet using cmdline arguments
logging.basicConfig(level=logging.WARNING if quiet else logging.INFO)
logger = logging.getLogger('logger')
my_file_handler = logging.FileHandler('file_name')
logger.addHandler(self.file)

使用上面的代码,我得到了我想要输出的输出,以及以非安静模式存档,例如:

logger.debug('want to show every time in file, but never to console')
logger.info('always in file, but only show in console if not quiet')
logger.warning('Show in both file and console, EVERY TIME') 

但是,如果我打开安静模式,我的屏幕和文件都无法输出。 无论是否安静,我都希望在我的日志文件中一切,但是如果它不是安静模式,则只打印到屏幕(基本上,无论日志记录级别如何,总是写入文件,但是根据日志记录级别打印)。

请告诉我该怎么做。

编辑:

我对每个级别差异的期望行为做了更清晰的帖子。在thisthis提供的答案中,设置FileHandler级别似乎对我的情况没有帮助,因为我总是希望将调试级别信息写入文件。

quiet = False # set quiet using cmdline arguments
logging.basicConfig(level=logging.WARNING if quiet else logging.INFO)
logger = logging.getLogger('logger')
my_file_handler = logging.FileHandler('file_name')
my_file_handler.setLevel(logging.DEBUG)       # added setLevel
logger.addHandler(self.file)

logger.debug('abcde')     # this doesn't show in file or console as my basicConfig
                          # is logging.INFO
                          # But i WANT it to

1 个答案:

答案 0 :(得分:3)

您只需要处理程序的级别控制,但不需要记录器。所以:

  1. 将记录器级别设置为您需要的最低级别(例如INFO)。
  2. 将控制台处理程序(StreamHandler)级别设置为quiet指示的任何级别。
  3. 不要在FileHandler上设置级别,以便它处理记录器传递的所有邮件。
  4. 您不能使用basicConfig()(它只在根记录器上设置级别,而不是在处理程序上设置) - 使用dictConfig()或使用API​​调用(addHandler,{ {1}}等。)