TL;DR

ログをキーと値の組で記録する手法。自由な文字列でなく名前の付いたフィールドで値を持つので、プログラムで解析、絞り込み、検索、分析しやすい。

なぜ必要か

Go Blog の slog の記事によると、ログは大量になりがちで、その中から素早く探せることが重要である。構造化ログはキーと値の組を使うので、速く確実に解析、絞り込み、検索、分析できる。

例

Go の log/slog では、メッセージの後にキーと値を並べて書く。

logger.Info("hello, world", "user", os.Getenv("USER"))

TextHandler なら time=... level=INFO msg="hello, world" user=jba、JSONHandler なら {"time":"...","level":"INFO","msg":"hello, world","user":"jba"} のように出力される。Rust では tracing クレートで構造化ログを出力できる。

関連

出典