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圧縮
})