Go言語のlog/slogサンプル
Go言語のlog/slogパッケージは、Go 1.21で導入された構造化ロギングのための標準ライブラリです。ログをキーと値のペアとして出力することで、人間にとっての可読性だけでなく、機械による処理や分析も容易にします。
- レベル付きロギング:
Debug,Info,Warn,Errorといったログレベルをサポートし、出力するログの重要度を制御できます。 - 構造化された出力: デフォルトでは、ログはキーと値のペアで構成されるテキスト形式(
key=value)またはJSON形式で出力されます。これにより、ログの検索やフィルタリングが容易になります。 - 柔軟なハンドラ:
slog.Handlerインターフェースを実装することで、ログの出力形式(テキスト、JSONなど)や出力先(標準出力、ファイル、ネットワークなど)をカスタマイズできます。 - コンテキスト対応:
context.Contextと連携し、リクエストIDなどの共通情報をログに含めることが容易です。
package main
import (
"log/slog"
"os"
)
func main() {
// デフォルトのテキストハンドラでロガーを作成
logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
// 情報レベルでログを出力
logger.Info("ユーザーがログインしました", "userID", 123, "userName", "gopher")
// エラーレベルでログを出力
logger.Error("データベース接続に失敗しました", "error", "connection refused")
}log/slogを利用することで、ログの可読性向上、効率的なログ分析、パフォーマンスへの影響低減といったメリットが期待できます。標準パッケージであるため、外部ライブラリへの依存を減らすことも可能です。
より詳細な情報や高度な使い方については、公式ドキュメントを参照してください。
- simple_sample
- slogのシンプルな使い方
- level
- slogの出力レベル設定について
- group
- slogの出力で属性をグルーピングする方法
- context
- slogの出力にcontextの内容を含める場合の例
- config_file:
- slogの設定に設定ファイルを使用する例
- musk
- トークンなどのシークレットをログ出力時にマスクしたいときの処理
- replace
- ログレコードの置き換えの例
- multioutput
- ログを同時に複数の出力先に出力する例
- custom_hundler
- 複数先へのログ出力することを例にしたカスタムハンドラの例