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 クレートで構造化ログを出力できる。