如何使用 python 的日志记录到屏幕和文件

Goo*_*oos 4 python logging python-2.7

我想使用 python 的日志记录到屏幕和文件

这是我登录屏幕的方式:

import logging
logging.basicConfig(level=logging.DEBUG)    
logging.debug('hello')
Run Code Online (Sandbox Code Playgroud)

这就是我登录到文件的方式:

import logging
logging.basicConfig(level=logging.DEBUG,filename='a.log')   
logging.debug('hello2')
Run Code Online (Sandbox Code Playgroud)

有没有办法同时登录到文件和屏幕?最好使用 logging.basicConfig

我正在使用 python 2.7.14

Mat*_* M. 7

如果您想要一个用于屏幕的记录器和一个用于日志文件的记录器,请尝试以下操作:

import logging


log = logging.getLogger('logger')
log.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(message)s')

fh = logging.FileHandler('test.log', mode='w', encoding='utf-8')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
log.addHandler(fh)

ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
ch.setFormatter(formatter)
log.addHandler(ch)
Run Code Online (Sandbox Code Playgroud)

这将创建两个日志处理程序。当您调用log.debug/ info/warning等时,它会记录到您的每个处理程序。如果它们设置的级别相同或更高,它将记录消息,否则不会。

在此示例中,调用log.debug("test message")会将str“测试消息保存到” test.log,但您不会在屏幕上看到输出,因为StreamHandler()的级别高于debug调试。

当您调用时log.info("test message"),它会将str“测试消息保存到test.log 输出到控制台,因为它StreamHandler()的级别是info

log.setLevel(logging.DEBUG)确保所有内容都将被记录。如果您排除此行,WARNING则将强制执行默认值,即使您在单独的处理程序中将级别设置得较低,您也无法记录任何 >= 该级别的内容

日志记录的级别如下:

DEBUG
INFO
WARNING
ERROR
CRITICAL
Run Code Online (Sandbox Code Playgroud)