提问者:小点点

Python日志到stdout和日志文件


我是相当新的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个答案

匿名用户

您只需要添加另一个处理程序,如日志记录。FileHandler

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

匿名用户

扩展@Brendan的答案。

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

通过添加文件处理程序,您可以登录到文件。

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

如果您想使用相同的格式登录,您也必须在新的FileHandler上设置该格式。

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

阅读更多:Python日志食谱

匿名用户

在多次使用Waterboy的代码在多个Python包中同时记录到控制台和文件(参见此线程)之后,我最终将其转换为一个小型的独立Python包,您可以在这里找到:

https://github.com/acschaefer/duallog

代码有很好的文档记录,并且易于使用。只需下载。py文件并将其包含在项目中,或者通过python安装程序安装整个软件包。py安装。

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

# 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')