🐙

Golang ロギング

2021/07/27に公開約1,500字

ログの標準パッケージ

logパッケージ

import (
    "log"
)

func main() {
    log.Print("This is test")
}

実行

2021/07/27 07:39:17 This is test
  • ログレベルの指定はない
  • パッケージごとに個別のロガーを構成をすることはできない
  • デフォルトでは「日付と時刻」がメッセージのプレフィックスに含まれる

ログ出力と同時にプログラム終了

log.Fatal("ログを出力して、プログラム終了となる")
fmt.Print("このログは出力されない")
log.Panic("ログとスタックトレースを出力して、プログラム終了となる")
fmt.Print("このログは出力されない")

ログのプリフィックス

log.SetPrefix("method_name(): ")
log.Print("ただのPrint()")
log.Fatal("こっちはFatal()")

実行

method_name(): 2021/07/27 08:51:33 ただのPrint()
method_name(): 2021/07/27 08:51:33 こっちはFatal()
exit status 1

ログのファイル出力

file, err := os.OpenFile("test.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
    log.Fatal(err)
}

defer file.Close()

log.SetOutput(file)
log.Print("This is test")

ログのフレームワーク

使用例

インストール

go get -u github.com/rs/zerolog/log

使用

package main

import (
    "github.com/rs/zerolog"
    "github.com/rs/zerolog/log"
)

func main() {
    zerolog.TimeFieldFormat = zerolog.TimeFormatUnix

    log.Debug().
        Int("AccountId", 157).
        Msg("Got account")

    log.Debug().
        Str("Name", "Ryo").
        Send()
}
{"level":"debug","EmployeeID":157,"time":1627344471,"message":"Got account"}
{"level":"debug","Name":"Ryo","time":1627344471}
GitHubで編集を提案

Discussion

ログインするとコメントできます