Python记录到stdout和日志文件

时间:2016-11-29 05:50:42

标签: python logging

我在python中相当新,并开始进入日志记录模块。我想将消息记录到日志文件中并输出到控制台。下面的代码将消息打印到控制台,但是如何让所有消息都登录到文件中?

Logger对象没有用于记录到文件的函数调用(basicConfig(filename =))。如何添加此功能?

感谢您的帮助。

import logging

# create logger
logger = logging.getLogger(_name_)
logger.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# add formatter to ch
ch.setFormatter(formatter)

# add ch to logger
logger.addHandler(ch)

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

3 个答案:

答案 0 :(得分:17)

您只需要添加另一个处理程序,例如logging.FileHandler

fh = logging.FileHandler(r'/path/to/log.txt')
logger.addHandler(fh)

答案 1 :(得分:9)

扩大@Brndanan的答案。

您的记录器当前使用StreamHandler输出到控制台。

通过添加FileHandler,您可以登录文件。

可以自定义每个处理程序实例,使其具有自己的格式和日志记录级别。

如果您想使用相同的格式进行日志记录,则还必须在新的FileHandler上设置格式。

fh = logging.FileHandler(r'/path/to/log.txt')
fh.setFormatter(formatter)
logger.addHandler(fh)

了解详情:Python logging cookbook

答案 2 :(得分:0)

在使用Waterboy的代码在多个Python包中一遍又一遍地同步记录到控制台和文件(请参阅this thread)之后,我最终将其转换为一个很小的独立Python包,您可以在这里找到它: / p>

https://github.com/acschaefer/duallog

该代码有据可查且易于使用。只需下载.py文件并将其包含在您的项目中,或通过python setup.py install安装整个软件包。

使用此软件包,您的代码应如下所示:

# Set up logging to console and file.
import duallog
duallog.setup(logdir='my_logs')

# Generate log messages.
import logging    
logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')