Open3
log/slog への移行について考えてみる
目標
- 2023/08 に Go1.21 のリリースで log/slog パッケージが導入されました。 2024/04 現在、実際にプロダクション環境への導入を検討するために他社事例やその他もろもろざっくり調査・検討してみる
slog への概要理解のために下記の記事を読んでみた
- https://pkg.go.dev/log/slog
- 🪵 Go1.21 log/slogパッケージ超入門
- もっと log/slog を使おう
- slog時代のGoではloggerをcontextで引きまわさなくて良い気がする
- Go 1.22リリース連載 vet, log/slog, testing/slogtest
- Goの新しい構造化ロガーを体験しよう
- https://speakerdeck.com/nownabe/go-de-cloud-logging-wo-shi-ikonasutameno-slog-huo-yong-fa
Google Cloud の Observability のサンプルコードが slog 使った実装例になっていた
log/slog 採用事例
ARIGATOBANK
- zap をもともと使っていたけど一部サービスで slog を利用している
- Cloud Logging 向けの Handler, ReplaceAttr を実装して使用している
- 出力に含まれるファイル名や行番号の取得の部分でログ出力元のファイル名や行番号として独自関数の定義位置が出力されてしまうので、修正の実装を入れてあげる必要があるとのこと
enechain
- connect-go の interceptor でデフォルトでつけたい Attribute を設定して引き回している (request id など)
- slogctx を使って context で logger を持っている
- https://github.com/phsym/slogctx
- context から logger を引いてそれを使うことで確実に Attribute が出るようにしている
- ReplaceAttr でログに出したくない Attribute をマスキングしている
Trivy
Issue: https://github.com/aquasecurity/trivy/issues/6451
PR: https://github.com/aquasecurity/trivy/pull/6466
- zap から slog に移行していた
- zap のほうがパフォーマンスはまだ良いけど Trivy では大量にログを吐くなどが無いので問題ない想定とのこと
その他
reddit の上記のスレッドを見てみたところ採用しているところがありそう