12.6 net/httpのエラーログをカスタマイズする

HTTPサーバーを提供するサーバーのロギングは「10.5  Middlewareパターンを使って処理を分離する 」で紹介しました。本節では net/http パッケージ内で出力するエラーログをカスタマイズする方法を紹介します。

net/http パッケージのHTTPサーバーは、コネクションを受け付ける処理やハンドラーで予期せぬエラーが発生した場合、標準エラー出力にエラーログを出力するようになっています。デフォルトでは log パッケージ標準のロガーを用いてエラーログを出力します。アプリケーションで rs/zerolog といったサードパーティーのロギングライブラリを使っている場合、 net/http が出力する log パッケージのログとサードパーティーのログが混ざったまま出力されてしまうと、ログのパースや調査が面倒になります。 net/http パッケージのログは http.Server 構造体の ErrorLog フィールドに独自のロギングを設定することでカスタマイズできますが、 ErrorLog の型が *log.Loggerなのでサードパーティーのロギングライブラリを設定する場合に、ひと工夫が必要なことがあります。

zerologの場合は zerolog.Loggerio.Write を満たす構造体になっているため log.New を用いて http.ServerErrorLog をカスタマイズできます。

リスト12-3: http.ServerのErrorLogをカスタマイズ
package main

import (
	"fmt"
	"log"
	"net/http"
	"os"

	"github.com/rs/zerolog" ...