在日常 Golang 开发中,你可能会遇到这样的日志格式:

[2021-09-01 12:34:56] [INFO] This is an example log message.
那么,如何用正则表达式从 Golang 日志中提取日期、日志级别和消息内容?其实方法很简单——利用 Go 标准库中的 regexp 包即可轻松实现。
以下是一段可用的正则表达式及完整的示例代码:
package main
import (
"fmt"
"regexp"
)
func main() {
logPattern := `(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) \[(INFO|WARN|ERROR)\] (.+)`
re := regexp.MustCompile(logPattern)
logLine := "[2021-09-01 12:34:56] [INFO] This is an example log message."
match := re.FindStringSubmatch(logLine)
if len(match) > 0 {
fmt.Printf("Date: %s\n", match[1])
fmt.Printf("Level: %s\n", match[2])
fmt.Printf("Message: %s\n", match[3])
} else {
fmt.Println("No match found")
}
}
在上述代码中,logPattern 正则表达式通过三个捕获组分别匹配日期、日志级别和消息内容。接着使用 regexp.MustCompile 进行编译,并通过 FindStringSubmatch 方法从日志行中提取匹配结果。若匹配成功,即可获取到日期、级别和具体的消息信息。
在实际生产环境中,Golang 日志格式可能更为复杂,例如包含时间戳、模块名称、请求 ID 等字段。此时只需参照上述思路,灵活调整正则表达式中的捕获组即可,核心的匹配与提取逻辑保持一致。
