日志解析器

使用带命名捕获组的正则表达式将日志行解析为结构化表格。

匹配模式

预设:

使用命名捕获组,例如 (?<ip>\S+) ,每个捕获组会成为一个结果列。

日志行

结构化输出

2 条匹配
ipusertimemethodpathprotostatussize
127.0.0.1frank10/Aug/2026:13:55:36 +0000GET/api/usersHTTP/1.12001024
10.0.0.5-10/Aug/2026:13:55:37 +0000POST/loginHTTP/1.1302-

编写表达式

用命名捕获组把日志拆成字段

JavaScript RegExp

先让表达式匹配一整行,再用命名捕获组标出需要输出的字段。每个非空日志行都必须匹配成功,捕获组名称会自动成为表格列名。

01

按日志顺序拆分

用 \S+ 匹配不含空格的字段,用 [^\]]+ 匹配方括号中的时间,用 [^\"]+ 匹配引号里的请求内容。

02

给字段命名

把要输出的部分写成 (?<name>...) ,例如 (?<status>\d{3}) 会生成名为 status 的结果列。

03

从锚点开始收尾

用 ^ 匹配行首、用 $ 匹配行尾;这样可以尽早发现字段顺序、空格或尾部内容不一致的日志行。

Apache / Nginx 示例

下面的表达式会提取 IP、用户、时间、请求方法、路径、协议、状态码和响应大小。

^(?<ip>\S+) \S+ (?<user>\S+) \[(?<time>[^\]]+)\] "(?<method>\S+) (?<path>\S+) (?<proto>[^"]+)" (?<status>\d{3}) (?<size>\S+)$

排错顺序

  1. 先只保留一个字段,确认表达式能匹配单行。
  2. 逐段添加空格、括号和字段,找到第一处不匹配的位置。
  3. 日志跨行时使用 s ,英文字母大小写不固定时使用 i ; g 不会跨日志行复用匹配游标。

输入与输出示例

INFO app started{ level: INFO, message: app started }

如何使用

  1. 输入每行一条的日志和正则。
  2. 查看自动更新的结构化结果。
  3. 切换表格、JSON 或 CSV 并复制结果。

能力与限制

  • 浏览器本地处理
  • 仅接受 JavaScript 命名捕获组语法。
  • 输入和解析结果不上传。

常见问题

没有命名组怎么办?
请使用 (?<name>...) 命名每一个要输出的字段。

相关指南

文本处理的常见操作 ↗

相关工具

更新于 2026-10-18 · 项目与反馈说明