Python日志分析核心是提取关键信息并结构化统计,需先确认日志格式,再用正则+Counter基础统计或pandas高效处理大数据量,最后封装为支持过滤、导出和可视化的可复用脚本。
Python日志文件分析的核心是提取关键信息并结构化统计,不需要手动逐行查看,用标准库就能快速完成常见任务。
不同项目日志格式差异大,比如:
- 默认logging模块输出:含时间、等级、模块名、消息,如 2025-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))
re.findall(r'" \d{3} ', line)
for m in re.finditer(r' - ERROR - (\w+) - (.+)', log_text): module_count[m.group(1)] += 1
当日志量大(>10MB)或需多维交叉统计时,pandas比纯Python快且直观:
立即学习“Python免费学习笔记(深入)”;
pd.DataFrame(log_records)
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 "2025-05-01")--sample选项,只处理前1000行用于调试不复杂但容易忽略。