17370845950

Python 使用 logging 将日志写入文件
使用logging.basicConfig()可将日志写入文件,如指定filename='app.log'和format格式;进阶用法通过Logger对象添加FileHandler和StreamHandler,实现日志同时输出到文件和控制台,并可设置编码、格式、级别及防止重复输出。

在 Python 中使用 logging 模块将日志写入文件是一个常见且重要的需求,有助于调试和监控程序运行状态。下面介绍如何正确配置 logging,将日志输出到文件中。

基本用法:写入日志到文件

最简单的方式是使用 logging.basicConfig() 设置日志输出文件和格式:

import logging

配置日志,写入到文件 app.log

logging.basicConfig( level=logging.INFO, filename='app.log', filemode='a', # 追加模式 format='%(asctime)s - %(levelname)s - %(message)s' )

写入几条日志

logging.info("程序启动") logging.warning("这是一个警告") logging.error("发生了一个错误")

执行后会在当前目录生成 app.log 文件,内容类似:

2025-04-05 10:20:30,123 - INFO - 程序启动
2025-04-05 10:20:30,124124 - WARNING - 这是一个警告
2025-04-05 10:20:30,124124 - ERROR - 发生了一个错误

进阶配置:同时输出到文件和控制台

有时候你希望日志既写入文件,又在终端显示。可以通过添加多个 handler 实现:

import logging

创建 logger

logger = logging.getLogger('MyApp') logger.setLevel(logging.DEBUG)

防止重复输出

logger.propagate = False

文件处理器

file_handler = logging.FileHandler('app.log', mode='a', encoding='utf-8') file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(funcName)s - %(message)s') file_handler.setFormatter(file_formatter) logger.addHandler(file_handler)

控制台处理器

console_handler = logging.StreamHandler() console_formatter = logging.Formatter('%(levelname)s: %(message)s') console_handler.setFormatter(console_formatter) logger.addHandler(console_handler)

使用

logger.info("这条日志会出现在文件和终端") logger.error("出错了!")

实用建议

  • 设置合适的日志级别:开发时可用 DEBUG,生产环境建议用 INFO 或 WARNING
  • 使用正确的文件编码:特别是记录中文时,指定 encoding='utf-8'
  • 合理选择 filemode'a' 是追加,'w' 每次清空重写
  • 按日期分割日志:可配合 logging.handlers.TimedRotatingFileHandler 实现自动轮转
  • 避免重复日志:自定义 logger 时设置 propagate=False 可防止向上层传递

基本上就这些。logging 模块功能强大,掌握基础用法后可以逐步扩展更复杂的日志管理策略。