Python日志分析核心是提取关键信息并结构化统计,需先确认日志格式,再用正则+Counter基础统计或pandas高效处理大数据量,最后封装为支持过滤、导出和可视化的可复用脚本。

Python日志文件分析的核心是提取关键信息并结构化统计,不需要手动逐行查看,用标准库就能快速完成常见任务。
明确日志格式再动手
不同项目日志格式差异大,比如:
- 默认logging模块输出:含时间、等级、模块名、消息,如 2024-05-10 14:23:18,123 - INFO - main - User login succeeded
- JSON格式日志:每行一个JSON对象,适合用json.loads解析
- Nginx或Django访问日志:空格/分隔符分段,需正则或split处理
先用head -n 3 your.log或Python读前几行确认结构,再决定解析方式。
用正则+字典做基础统计
针对文本日志,常用re匹配关键字段,用defaultdict或Counter累计:
- 按日志等级统计次数:
Counter(re.findall(r' - (INFO|WARNING|ERROR) - ', log_text)) - 提取HTTP状态码(如access.log):
re.findall(r'" \d{3} ', line) - 统计某类错误出现的模块:
for m in re.finditer(r' - ERROR - (\w+) - (.+)', log_text): module_count[m.group(1)] += 1
用pandas提升分析效率
当日志量大(>10MB)或需多维交叉统计时,pandas比纯Python快且直观:
立即学习“Python免费学习笔记(深入)”;
- 把每行日志解析为字典,转成DataFrame:
pd.DataFrame(log_records) - 一行代码统计各模块ERROR数量:
df[df.level == 'ERROR'].module.value_counts() - 按小时聚合请求量:
df['hour'] = pd.to_datetime(df.time).dt.hour; df.hour.value_counts().sort_index()
封装成可复用的小脚本
避免每次重写,建议写一个带参数的脚本,例如:
- 支持传入日志路径、等级过滤(
--level ERROR)、时间范围(--since "2024-05-01") - 输出支持文本摘要、CSV导出、简单图表(用matplotlib画柱状图)
- 加个
--sample选项,只处理前1000行用于调试
不复杂但容易忽略。









