在Golang中,解析復雜日志格式通常需要使用正則表達式和結構體。以下是一個簡單的示例,展示了如何解析復雜日志格式:
type LogEntry struct {
Timestamp string
Level string
Message string
// 其他字段...
}
2021-08-01 12:34:56 [INFO] This is an info message
可以創建一個正則表達式來匹配這種格式:
var logPattern = regexp.MustCompile(`(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) \[(\w+)\] (.+)`)
func parseLogLine(line string) (*LogEntry, error) {
matches := logPattern.FindStringSubmatch(line)
if len(matches) != 4 {
return nil, fmt.Errorf("invalid log format")
}
return &LogEntry{
Timestamp: matches[1],
Level: matches[2],
Message: matches[3],
}, nil
}
parseLogLine
函數解析日志行:func main() {
logLine := "2021-08-01 12:34:56 [INFO] This is an info message"
logEntry, err := parseLogLine(logLine)
if err != nil {
log.Fatalf("Error parsing log line: %v", err)
}
fmt.Printf("Parsed log entry: %+v\n", logEntry)
}
這個示例中的正則表達式和結構體可以根據實際的日志格式進行調整。對于更復雜的日志格式,可能需要使用更復雜的正則表達式和更多的結構體字段。