Python记录到stdout和日志文件

Zen*_*Zen 20 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')
Run Code Online (Sandbox Code Playgroud)

Bre*_*bel 18

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

fh = logging.FileHandler(r'/path/to/log.txt')
logger.addHandler(fh)
Run Code Online (Sandbox Code Playgroud)


vic*_*tor 9

扩展@Brndanan的答案.

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

通过添加a FileHandler,您可以登录到文件.

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

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

fh = logging.FileHandler(r'/path/to/log.txt')
fh.setFormatter(formatter)
logger.addHandler(fh)
Run Code Online (Sandbox Code Playgroud)

阅读更多:Python日志食谱