如何使用Python日志模块写入文件?

319 投票
12 回答
495062 浏览
提问于 2025-04-16 19:46

我该如何在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')

这五个部分的作用依次是:

  1. 设置输出文件(filename=logname
  2. 设置为追加内容,而不是覆盖原有内容(filemode='a'
  3. 确定输出信息的格式(format=...
  4. 确定输出时间的格式(datefmt='%H:%M:%S'
  5. 确定它接受的最低消息级别(level=logging.DEBUG)。

撰写回答