Edited at

golang zap v1.0.0 でログの日付をJSTで表示する方法


概要

zapはgolangのloggerライブラリです。

golang標準パッケージのlogでは足りないログレベルや、JSONでの出力などをサポートしているため自分はこのライブラリをloggerとしてよく使っています。

他にもlogrusというライブラリも有名ですが、zapはlogrusに比べて高速に動きます。


JSTフォーマットでのTIME出力

日本で開発している以上、ログのタイムスタンプも日本時間で表示させたいところです。

zapでは、以下のようにすることでタイムスタンプの形式をJSTフォーマットで表示させることができます。


main.go


package main

import (
"time"

"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)

func main (
encodeConfig := zap.NewProductionEncoderConfig()
encodeConfig.EncodeTime = JSTTimeEncoder

logger := zap.New(
zapcore.NewCore(zapcore.NewJSONEncoder(encodeConfig))
)

logger.Info("This is test.")
)

func JSTTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
const layout = "2006-01-02T15:04:05+09:00"
jst := time.FixedZone("Asia/Tokyo", 9*60*60)
enc.AppendString(t.In(jst).Format(layout))
}



log

{"level":"info","ts":"2016-12-21 12:20:34","msg":"This is test."}