如何使用Python日志模块写入文件?
我该如何在Python中使用logging模块将信息写入文件?每次我尝试使用它时,它只是把信息打印出来。
12 个回答
65
这里有两个例子,一个是打印日志(标准输出),另一个是把日志写入一个文件:
import logging
import sys
logger = logging.getLogger()
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s | %(levelname)s | %(message)s')
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.DEBUG)
stdout_handler.setFormatter(formatter)
file_handler = logging.FileHandler('logs.log')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.addHandler(stdout_handler)
在这个例子中,所有的日志都会被打印出来,同时也会写入一个叫做 logs.log 的文件中。
使用示例:
logger.info('This is a log message!')
logger.error('This is an error message.')
所有内置日志处理器的列表可以在这里找到 https://docs.python.org/3/library/logging.handlers.html
133
摘自“日志记录食谱”:
# create logger with 'spam_application'
logger = logging.getLogger('spam_application')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
logger.addHandler(fh)
这样就可以开始使用了。
附言:确保也阅读一下日志记录入门指南。
402
这是一个使用 logging.basicConfig
而不是 logging.fileHandler()
的例子。
logging.basicConfig(filename=logname,
filemode='a',
format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
datefmt='%H:%M:%S',
level=logging.DEBUG)
logging.info("Running Urban Planning")
logger = logging.getLogger('urbanGUI')
这五个部分的作用依次是:
- 设置输出文件(
filename=logname
) - 设置为追加内容,而不是覆盖原有内容(
filemode='a'
) - 确定输出信息的格式(
format=...
) - 确定输出时间的格式(
datefmt='%H:%M:%S'
) - 确定它接受的最低消息级别(
level=logging.DEBUG
)。