我目前使用日志记录模块在脚本中实现了安静模式,如下所示:
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
最佳答案
您只需要对处理程序进行级别控制,而不需要对记录器进行级别控制。所以:
- 将记录器级别设置为您需要的最低级别(例如
INFO
)。 - 将控制台处理程序 (
StreamHandler
) 级别设置为quiet
指示的任何级别。 - 不要在
FileHandler
上设置级别,以便它将处理记录器传递的所有消息。
您不能为此使用 basicConfig()
(它仅设置根记录器上的级别,而不是处理程序) - 使用 dictConfig()
或使用API 调用(addHandler
、setLevel
等)
关于python - 无论级别设置如何,如何始终将日志消息写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24121588/