Go言語のログ用パッケージlogrusとlumberjackの利用方法についてまとめる。(N番煎じ記事)
インストール
$ go get github.com/sirupsen/logrus // logrus
$ go get gopkg.in/natefinch/lumberjack.v2 // lumberjack
インポート
import (
log "github.com/sirupsen/logrus"
"gopkg.in/natefinch/lumberjack.v2"
)
ログ出力フォーマットの指定
JSON
log.SetFormatter(&log.JSONFormatter{})
標準TXT
log.SetFormatter(&log.TextFormatter{})
ログレベル指定
セットしたレベル以上のログを出力する。
// Warningレベル以上
log.SetLevel(log.WarnLevel)
ログレベル別出力
log.Trace("Something very low level.")
log.Debug("Useful debugging information.")
log.Info("Something noteworthy happened!")
log.Warn("You should probably take a look at this.")
log.Error("Something failed but I'm not quitting.")
log.Fatal("Bye.")
log.Panic("I'm bailing.")
出力情報
- 呼び出し元情報
log.SetReportCaller(true)
- 変数の埋め込み
log.WithFields(log.Fields{
"animal": "walrus",
"size": 10,
}).Info("A group of walrus emerges from the ocean")
-
共通的に使用する変数の埋め込み
contextLogger := log.WithFields(log.Fields{ "common": "this is a common field", "other": "I also should be logged always", }) contextLogger.Info("I'll be logged with common and other field") contextLogger.Info("Me too")
出力先の指定
標準出力
log.Out = os.Stdout
ファイル出力
import ( "os" log "github.com/sirupsen/logrus" ) file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err == nil { log.Out = file } else { log.Info("Failed to log to file, using default stderr") }
ログローテーション
log.SetOutput(&lumberjack.Logger{
Filename: "log/app.log", // ファイル名
MaxSize: 500, // ローテーションするファイルサイズ(megabytes)
MaxBackups: 3, // 保持する古いログの最大ファイル数
MaxAge: 365, // 古いログを保持する日数
LocalTime: true, // バックアップファイルの時刻フォーマットをサーバローカル時間指定
Compress: true, // ローテーションされたファイルのgzip圧縮
})