阿里云sls日志正则格式化

阿里云 SLS 支持多种日志采集和解析方式,常见的是基于正则(Regex)或 JSON。


目的

采集日志格式化字段、存储阿里云sls,方便日志检索及字段建立索引。

解决

只要是有日志格式化输出的,就可以用正则格式化日志。

1.原始格式

你当前的格式输出大概是这样的日志内容:

2025-07-16 16:32:14.123 | INFO     | app:process_request:42 - abc123     | Request started

其中这些字段含义为:

  • {time} → 时间戳
  • {level} → 日志级别
  • {name}:{function}:{line} → 文件名、函数名、行号
  • {extra[request_id]} → 请求 ID
  • {message} → 日志消息内容

2. 正则格式化日志

正则表达式

(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \| (?P<level>\w+)\s+\| (?P<name>\w+):(?P<function>\w+):(?P<line>\d+) - (?P<request_id>\w+)\s+\| (?P<message>.*)

坑:阿里云不支持正则含字段名字,须移除。
阿里云 SLS 目前不支持 (?P…) 这种命名捕获组,而是只支持普通捕获组 (…),然后你要在 Web 控制台里手动给每个字段命名。

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \| ([A-Z]+)\s+\| ([a-zA-Z0-9_.]+):([a-zA-Z0-9_]+):(\d+) - ([a-f0-9]+) \| (.*)