Python记录日志的完整指南
作者:detayun
在Python开发中,日志记录是监控程序运行、排查问题的核心手段,本文基于Python内置的logging模块,结合最佳实践,带你系统掌握日志记录的完整方法,需要的朋友可以参考下
一、为什么需要日志记录?
- 问题定位:记录程序运行时状态,快速定位异常
- 性能监控:跟踪关键业务指标(如API请求耗时)
- 审计追踪:记录用户操作和系统变更
- 调试辅助:比
print()更灵活可控的调试方式
二、基础使用:5分钟快速上手
import logging
# 创建基础配置
logging.basicConfig(
level=logging.INFO, # 设置日志级别
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(), # 输出到控制台
logging.FileHandler('app.log') # 输出到文件
]
)
# 创建记录器
logger = logging.getLogger('my_app')
# 记录不同级别的日志
logger.debug('调试信息')
logger.info('程序正常启动')
logger.warning('磁盘空间不足')
logger.error('数据库连接失败')
logger.critical('系统崩溃')
三、核心组件深度解析
日志级别(从低到高)
- DEBUG:详细调试信息
- INFO:常规操作记录
- WARNING:潜在问题提醒
- ERROR:运行时错误
- CRITICAL:严重错误导致程序中止
五大核心组件

配置方式对比
| 配置方式 | 适用场景 | 优点 |
|---|---|---|
| basicConfig() | 简单脚本/快速原型 | 一行代码完成基础配置 |
| 代码配置 | 中小型项目 | 灵活可控 |
| 配置文件 | 大型项目/团队协作 | 分离配置与代码 |
| 字典配置 | 动态配置/12因子应用 | 兼容环境变量 |
四、高级用法与最佳实践
1. 日志轮转(避免日志文件过大)
from logging.handlers import RotatingFileHandler
# 每个文件10MB,保留3个备份
handler = RotatingFileHandler(
'app.log',
maxBytes=10*1024*1024,
backupCount=3
)
logger.addHandler(handler)
2. 异步日志(提升性能)
from logging.handlers import QueueHandler, QueueListener import queue import threading log_queue = queue.Queue(-1) listener = QueueListener(log_queue, *logger.handlers) listener.start() logger.addHandler(QueueHandler(log_queue))
3. 上下文信息记录(如请求ID)
from logging import LoggerAdapter
class RequestContext:
def __init__(self, request_id):
self.request_id = request_id
adapter = LoggerAdapter(logger, {'request_id': 'REQ123'})
adapter.info('处理用户请求')
# 输出:[2025-09-04 10:00:00] - my_app - INFO - REQ123 - 处理用户请求
4. 敏感信息过滤
class SensitiveFilter:
def filter(self, record):
msg = record.msg
# 替换敏感信息(如密码)
msg = msg.replace('password=123456', 'password=******')
record.msg = msg
return True
logger.addFilter(SensitiveFilter())
五、常见问题解决方案
1. 日志重复记录问题
- 原因:多次调用
getLogger()导致重复添加Handler - 解决:使用
__name__作为日志器名称,确保单例模式
2. 多线程日志安全
- 问题:多线程下日志顺序错乱
- 解决:使用
logging内置线程锁(默认已处理),或改用异步日志
3. 日志文件权限问题
- 问题:Linux下普通用户无法写入日志文件
- 解决:创建专用日志目录并设置权限
mkdir /var/log/myapp chmod 775 /var/log/myapp chown -R appuser:appgroup /var/log/myapp
六、企业级日志架构建议
日志分级策略
- DEBUG:本地开发环境
- INFO:预生产环境
- WARNING及以上:生产环境
集中化日志管理
- 使用ELK(Elasticsearch+Logstash+Kibana)或Sentry
- 配置日志采集代理(如Filebeat)
日志格式规范
- 推荐JSON格式(便于解析)
- 包含关键字段:时间戳、日志级别、类名、方法名、消息、线程ID
结语
掌握Python日志记录不仅是开发的基本功,更是构建可维护、可观测系统的基石。从简单的print()替换开始,逐步掌握格式化、处理器配置、日志轮转等高级技巧,最终构建符合企业级标准的日志系统。
最佳实践建议:
- 始终使用
logging模块代替print() - 生产环境至少配置两个Handler(控制台+文件)
- 敏感信息必须脱敏处理
- 定期审查日志策略(建议每季度)
通过本文的系统讲解和代码示例,相信你已经具备设计专业日志系统的能力。立即在项目中实践这些技巧,让你的Python应用具备工业级的可观测性吧!
到此这篇关于Python记录日志的完整指南的文章就介绍到这了,更多相关Python记录日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
