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

标签 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') 

但是,如果我打开安静模式,我的屏幕和文件都不会收到任何输出。 我希望日志文件中的所有内容无论是否安静,但仅在不是安静模式时打印到屏幕(基本上,无论日志记录级别如何,始终写入文件,但根据日志记录级别进行打印)。

请告诉我该怎么做。

编辑:

我就每个级别差异的期望行为发表了更明确的帖子。在this提供的答案中和 this ,设置 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. 将记录器级别设置为您需要的最低级别(例如 INFO)。
  2. 将控制台处理程序 (StreamHandler) 级别设置为 quiet 指示的任何级别。
  3. 不要在 FileHandler 上设置级别,以便它将处理记录器传递的所有消息。

您不能为此使用 basicConfig() (它仅设置根记录器上的级别,而不是处理程序) - 使用 dictConfig() 或使用API 调用(addHandlersetLevel 等)

关于python - 无论级别设置如何,如何始终将日志消息写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24121588/

相关文章:

python - ubuntu 在哪里找到 python 3.6.8 而不是 2.7?应该引用哪些资料来了解原理?

c# - 在 asp.net 核心控制台应用程序中使用 log4net 进行日志记录

java - 如何在log4j中自动折叠重复的日志输出

node.js - 如何登录 - 12 因素应用方式

android - 带有设备自定义模型的 Django 推送通知

python - 用正则表达式检查大小写?

Python 日志记录 : change log message level

logging - 如何记录通过 ejabberd 的消息

python - 将上三角形条目的平面列表复制到完整矩阵?

python - Zope 安装到错误的版本(easy_install 和 pip)