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

在 Python 中使用 logging 模块将日志写入文件是一个常见且重要的需求,有助于调试和监控程序运行状态。下面介绍如何正确配置 logging,将日志输出到文件中。
最简单的方式是使用 logging.basicConfig() 设置日志输出文件和格式:
import logging
<h1>配置日志,写入到文件 app.log</h1><p>logging.basicConfig(
level=logging.INFO,
filename='app.log',
filemode='a', # 追加模式
format='%(asctime)s - %(levelname)s - %(message)s'
)</p><h1>写入几条日志</h1><p>logging.info("程序启动")
logging.warning("这是一个警告")
logging.error("发生了一个错误")</p>执行后会在当前目录生成 app.log 文件,内容类似:
云EC电商系统(简称云EC)是由佛山市云迈电子商务有限公司自主开发的一套免费、开源的基于PHP+MYSQL电商系统软件。 云EC电商系统 1.2.1 更新日志:2018-08-10 1.修复部分环境下二维码不显示的问题; 2.商品列表增加多属性筛选支持; 3.修复更新优惠券状态时错将已使用的优惠券也更新为过期; 4.修复文章发布远程图片下载失败; 5.修复某些情况下运费计算出错导致
2595
立即学习“Python免费学习笔记(深入)”;
2024-04-05 10:20:30,123 - INFO - 程序启动 2024-04-05 10:20:30,124 - WARNING - 这是一个警告 2024-04-05 10:20:30,124 - ERROR - 发生了一个错误
有时候你希望日志既写入文件,又在终端显示。可以通过添加多个 handler 实现:
import logging
<h1>创建 logger</h1><p>logger = logging.getLogger('MyApp')
logger.setLevel(logging.DEBUG)</p><h1>防止重复输出</h1><p>logger.propagate = False</p><h1>文件处理器</h1><p>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)</p><h1>控制台处理器</h1><p>console_handler = logging.StreamHandler()
console_formatter = logging.Formatter('%(levelname)s: %(message)s')
console_handler.setFormatter(console_formatter)
logger.addHandler(console_handler)</p><h1>使用</h1><p>logger.info("这条日志会出现在文件和终端")
logger.error("出错了!")</p>encoding='utf-8'
'a' 是追加,'w' 每次清空重写logging.handlers.TimedRotatingFileHandler 实现自动轮转propagate=False 可防止向上层传递基本上就这些。logging 模块功能强大,掌握基础用法后可以逐步扩展更复杂的日志管理策略。
以上就是Python 使用 logging 将日志写入文件的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号