编写参数化Python脚本合并两种格式日志、统一格式并按日期排序
双格式日志合并整理脚本优化实现思路
日志基础属性说明
两类日志文件核心维度完全一致,没有字段差异,具体信息如下:
- 固定共有5个属性维度:
- 时间戳:格式示例为
2020-07-22 07:22:37.822863 - 错误类别:取值固定为
Exception或ERROR - 错误消息:为标准化标识,如Error1、Error2
- 关联操作用户:为系统操作账号,如oracle、administrator
- 日志ID:为数字型唯一标识,如3521、2294
- 时间戳:格式示例为
- 两类日志的格式差异:
sample_1.log:类JSON结构化格式,每行以ISO格式时间戳开头,后续接结构化JSON字段sample_2.log:常规纯文本日志格式,每行按固定顺序排布错误级别、时间信息、错误消息、跟踪ID、操作用户等字段
当前实现基础与目标需求
- 现有实现基础:已完成可将
sample_1.log转换为sample_2.log文本格式的Python逻辑代码 - 脚本合规要求:必须遵循标准命令行参数规范,执行方式为
python consolidate.py sample_1.log sample_2.log output.log - 待实现的核心能力:
- 同时读取两类不同格式的日志源文件
- 将所有日志事件统一转换为
sample_2.log的纯文本格式 - 全量日志事件按时间戳排序
- 处理完成的结果统一写入指定的目标输出文件
可行的优化实现路径
- 搭建统一中间数据结构
解析两类日志时,不直接拼接成目标文本行,而是先将每条日志映射为存储固定5个维度字段的字典对象,从根源上消除格式差异,为后续排序、格式转换提供统一的操作基础 - 拆分独立的格式解析模块
- 对
sample_1.log:复用现有解析逻辑,逐行匹配开头的时间戳字段,截取后续JSON结构片段做反序列化,将抽取到的字段映射到统一中间结构,补充字段缺失的兼容处理 - 对
sample_2.log:新增对应纯文本解析逻辑,按现有文本的固定分隔规则拆分每行字段,同样映射到统一中间结构,确保字段和目标输出格式一一对应
- 对
- 统一排序处理
将两类日志解析得到的全量条目汇总到同个列表中,借助Python内置的datetime模块将字符串格式的时间戳转换为可直接对比的时间对象,以此作为排序key完成全量条目排序,避免字符串排序带来的格式匹配误差 - 批量格式输出
严格遵循sample_2.log的文本拼接规则,将排序后的每条日志条目转换为对应格式的文本行,逐行写入到命令行指定的输出文件路径 - 实用细节优化
- 采用逐行流式读取方式处理日志,避免超大日志文件一次性加载到内存造成资源占用过高
- 增加异常行容错逻辑,遇到格式损坏、字段缺失的日志行直接输出提示并跳过,不中断全流程处理
- 解析阶段统一校验时间戳格式,确保中间结构中的时间字段可正常完成排序对比
内容的提问来源于stack exchange,提问作者FreeRunner
相关产品推荐
相关产品推荐

