日志解析器

粘贴原始日志——JSON、logfmt、Web 访问、syslog 或普通文本——不写模式,直接得到时间、级别、异常与关键字段。

怎么用

  1. 粘贴一段日志或打开本地 .log / .txt 文件。解析立刻开始,没有「运行」按钮;每一行依次尝试 JSON、logfmt、Web 访问、syslog,以及「时间或级别开头」的文本。
  2. 先看摘要:时间范围、级别分布、异常数、识别到的格式与最常见的字段键。摘要始终统计全部事件。
  3. 点级别 chip 或在搜索框输入关键词来缩小列表,两者可叠加。点任意一行可展开完整消息、全部字段、异常堆栈与原始行;复制或下载的是当前筛选后的 JSON。

示例

原始日志

2026-10-20T13:55:36.123Z 信息 [网关] 收到请求 path=/api/orders user_id=4821
{"@timestamp":"2026-10-20T13:55:37.004Z","level":"错误","service":"支付服务","message":"扣款失败","order_id":"A-1042","user_id":4821}
2026-10-20 13:55:40,512 错误 [订单服务] 提交订单时发生未处理异常
java.lang.IllegalStateException: 网关超时
    at com.acme.Order.submit(Order.java:42)

解析摘要

事件:3 · 行数:5
时间范围:2026-10-20T13:55:36.123Z → 2026-10-20T13:55:40.512(时区混合)
级别:信息 1 · 错误 2
异常:1
格式:JSON 1 · 文本 2
字段:path 1 · user_id 2 · order_id 1 · service 1

第二行是一个完整的 JSON 事件;Java 类名与堆栈归入上一条「错误」事件。最后一行没有时区,按字面时刻参与比较,所以时间范围标注为「时区混合」。中文级别词与英文级别词一样识别,输入原文不会被改写。

口径、上限与已知问题

  • 格式逐行识别,顺序固定:JSON(一行一个对象)、logfmt(至少 2 个 key=value)、Apache/Nginx Common/Combined 访问日志、syslog RFC 5424/3164,最后是「行首为支持的时间戳或级别」的文本。都不命中就保留为普通事件,不丢行。
  • 只归一化无歧义的时间:ISO 8601、年在前日期、Apache 访问时间、Unix 秒/毫秒。03/04/2026、只有日期、无年份 syslog 只保留原文,时间字段为空,绝不猜。
  • 小数秒截断到毫秒,不四舍五入;偏移原样保留。没有时区的时间按字面时刻比较,摘要会标注「无时区的字面时间」或「时区混合」。
  • 级别来自固定词表(英文 + 中文/阿语词)、pino/bunyan 数字、syslog PRI/severity,或 HTTP 状态码(5xx 错误、4xx 警告、其余信息)。识别不到就是未知,不默认成 info。
  • 缩进行、堆栈帧、Traceback、Exception in thread、Caused by 会并入上一条事件;空行结束堆栈。这是启发式规则,自定义多行格式可能需要用空行分隔事件。
  • 异常只从以 Exception / Error / Throwable 结尾的类名识别;有多个 Caused by 时取最深的一条。不解析堆栈帧、不做根因排序、不调用 AI。
  • 列表最多渲染 200 条匹配事件;计数、摘要、复制与下载始终覆盖全部匹配,列表会明确提示被截断。
  • 输入硬上限 5,000,000 字符;超过 500,000 字符仍会解析,但防抖更长。单行超过 200,000 字符时按普通文本保留。
  • 不支持 JSON 数组与多行美化 JSON——只接受一行一个对象;非法 JSON、注释、尾逗号不会被修复,按普通文本保留。
  • 不联网、不上传、不写 URL/存储/log;文件只通过浏览器 File API 本地读取,复制与下载由你主动点击触发。

日志结构化之后,通常还需要这些。