LoginSignup
7
6

More than 5 years have passed since last update.

GojiのアクセスログをJSON形式で出力する

Posted at

Gojiのデフォルトのアクセスログはあまりセクシーではないので、JSON形式で出力できればfluentd等のログプロセッサとの相性も高まり、利便性が向上しそうなので試してみました。

Logrus / glogrus

github.com/Sirupsen/logrusはGoで利用できるロガーで、出力フォーマットを自由に設定することができます。今回は、これを利用してJSON形式でアクセスログを出力させるようにします。

GojiアプリケーションからLogrusを利用するには、github.com/goji/glogrusを利用するのが簡単です。これはLogrusのインスタンスを渡すと、それををロガーとして使用できるようにするGojiミドルウェアでです。

import(
    "github.com/zenazn/goji"
    "github.com/zenazn/goji/web/middleware"
    "github.com/goji/glogrus"
    "github.com/Sirupsen/logrus"
)
// ロガーを生成し、出力フォーマットと出力ファイルを設定する
logger := logrus.New()
logger.Formatter = new(logrus.JSONFormatter)
f, _ := os.OpenFile("/var/log/my_app.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
logger.Out = f

// 生成したロガーをGojiで使用するようにする
goji.Use(glogrus.NewGlogrus(logger, "my_app"))

// Gojiデフォルトのロガーを無効にする
goji.Abandon(middleware.Logger)

// Gojiアプリケーションの開始
goji.Serve()

上記のようにすることで、アクセスログをJSON形式で出力できるようになりました。ここではJSON形式を選択しましたが、Formatterを変更することで他の形式でも出力することができるようになります(たとえば、LTSVならgithub.com/doloopwhile/logrusltsvを利用できます)。

7
6
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
7
6