LoginSignup
1
0

More than 3 years have passed since last update.

logrusでナノ秒まで時刻出力を行いたい

Posted at

golang の構造化ロガーのうち有名なものの一つに logrus があります。構造化ログとして JSON フォーマットを指定するとするとだいたいこんな感じになります

{"level":"info","msg":"hello world","time":"2019-09-01T06:56:59+09:00","user":"kiririmode"}

で、このログのタイムスタンプなんですが、できるだけ分解能を細かくしたい。ログにおいてはタイムスタンプって解析の貴重な手がかりなので、秒単位だときつい。せめてミリ秒まで、できればナノ秒まであってほしい。
というわけでプロジェクト内で何とかしてくれって話が上がったのですが、logrus においての出力時刻フォーマット指定は、以下のように JSONFormatterTimestampFormat でできる。

func main() {
    log := &logrus.Logger{
        Out: os.Stderr,
        Formatter: &logrus.JSONFormatter{
            TimestampFormat: time.RFC3339Nano,
        },
        Level: logrus.InfoLevel,
    }

    log.WithField("user", "kiririmode").Infoln("hello world")
}

logrus においては、デフォルトのフォーマットは time.RFC3339 ("2006-01-02T15:04:05Z07:00") で指定されているので、それを time.RFC3339Nano ("2006-01-02T15:04:05.999999999Z07:00") に変更すれば良い。

上記コードを出力すると、出力タイムスタンプの分解能がナノ秒に変わります。

{"level":"info","msg":"hello world","time":"2019-09-01T06:52:23.713652+09:00","user":"kiririmode"}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0