Skip to main content
 首页 » 编程设计

python之在 WARNING 级别记录到文件并在 INFO 级别打印到标准输出

2025年05月04日16jyk

我想控制在哪个级别记录到文件,以及在哪个级别打印到标准输出。在这种情况下更准确地说,我希望让 logger 将 INFO|WARNING|ERROR 消息打印到 stdout 并将 WARNING|ERROR 消息记录到文件。

这是我目前拥有的:

import logging 
 
# Logging 
log_filepath = 'log_file.log' 
logger = logging.getLogger('My logger') 
hdlr = logging.FileHandler( log_filepath ) 
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
hdlr.setFormatter(formatter) 
logger.addHandler(hdlr)  
logger.setLevel(logging.WARNING) 
 
# Logging to stdout 
ch = logging.StreamHandler(sys.stdout) 
ch.setLevel(logging.INFO) 
ch.setFormatter(formatter) 
logger.addHandler(ch) 
 
# Usage 
logger.info('Hello')       # Show infos but do not log to file (does not show in stdout) 
logger.warning('Oops')     # Show warnings and log to file 
logger.error('Dang!')      # Show errors and log to file 

但是,INFO 级别的消息不会显示在标准输出中。这是为什么?

我在使用 OS X Mavericks。

请您参考如下方法:

您的问题是您将记录器级别设置为警告。因此,您所有的处理程序都从警告级别登录。

您应该将文件记录器处理程序设置为 WARNING 级别,并将记录器本身设置为 INFO 级别或不设置。默认级别是 NOTSET,这意味着所有消息都被处理或委托(delegate)。

hdlr.setLevel(logging.WARNING) 
logger.setLevel(logging.INFO)