如何解析request.log日志文件并转换为指定结构的JSON数组对象
实现方案
你可以直接通过正则匹配日志里的请求标记行完成解析,不需要处理后续冗余的请求头JSON块,逻辑简单且不容易因为日志格式微调报错:
- 核心匹配规则:所有请求的方法、URL都固定在
###开头的行,用正则/###\s+([A-Z]+)\s+(https?:\/\/\S+)/g就能批量提取对应字段 - 提取到原始URL后,如果需要做域名替换、路径截断(比如你示例输出里把
https://test.csdf/auth/send_otp调整为https://test.co/otp),直接加自定义字符串处理逻辑即可
Node.js 实现代码
const fs = require('fs'); // 读取本地日志文件 const logContent = fs.readFileSync('./request.log', 'utf-8'); const requestMatchReg = /###\s+([A-Z]+)\s+(https?:\/\/\S+)/g; const parseResult = []; let currentMatch; while ((currentMatch = requestMatchReg.exec(logContent)) !== null) { let [, method, originalUrl] = currentMatch; // 这里可以加自定义URL处理逻辑,比如替换域名、截断路径 // 示例:originalUrl = originalUrl.replace('test.csdf/auth/', 'test.co/') parseResult.push({ method, url: originalUrl }) } // 最终输出符合要求的JSON数组 console.log(JSON.stringify(parseResult, null, 2));
Python 实现代码
import re import json with open('request.log', 'r', encoding='utf-8') as f: log_content = f.read() match_pattern = re.compile(r'###\s+([A-Z]+)\s+(https?://\S+)') parse_result = [] for method, original_url in match_pattern.findall(log_content): # 这里加自定义URL处理逻辑即可 parse_result.append({ "method": method, "url": original_url }) print(json.dumps(parse_result, indent=2, ensure_ascii=False))
注意:你给出的预期输出里的URL和日志原始URL存在域名、路径差异,这部分属于业务自定义的转换规则,按实际需求在代码注释标注的位置补充处理逻辑即可。
内容的提问来源于stack exchange,提问作者N Hilmi
相关产品推荐
相关产品推荐

