woodcockのブログ

ソフトウェアエンジニアをしています。技術メモや買ってよかったものなどを記録していきます。

GCPのCloud Runでzerologを使う

Golangでログと言えばzapを使っていましたが、以下の記事で他の良いロギングライブラリを知ることが出来、せっかくなので他のものを使ってみることにしました。

moriyoshi.hatenablog.com

早見表を見て良さげだったので、特に何も考えずにZeroLogを選びました。

github.com

最近勉強がてらCloud Runを使っているので、この上で動かします。

つまりどころ

正直ブログにすることがないくらい、Readmeを見て速攻で使えてしまいました。

が、それでは困るので強いていうと、

デフォルトの使い方の通り

log.Info().Msgf("Received requests.")

などとしても、ログエクスプローラの画面上でSeverity(重大度)を表示させる事ができません。

f:id:woodcock:20220214015035p:plain

(この※マークのようなものはデフォルトの意味だそうです)

f:id:woodcock:20220214015516p:plain

そこでどのようにすれば良いかですが、ログメッセージに

{ "Severity" : "Info" }

と追加すれば良い模様。

ZeroLogでどうするかですが、これもReadmeにそのまま例が書いてあり、 Hookの仕組みを使えばOKでした。 これは、Hookが登録されたLoggerでログを出力する都度、そのHookのメソッドを呼び出してくれるというものです。

例としては(Readmeそのままですが)、こんな感じでHookのStructを定義しておいて、

package service

import "github.com/rs/zerolog"

type SeverityHook struct{}

func (h SeverityHook) Run(e *zerolog.Event, level zerolog.Level, msg string) {
    if level != zerolog.NoLevel {
        e.Str("severity", level.String())
    }
}

ログ出力時にHookを登録したLoggerを利用すればOKです。

logger := log.Hook(SeverityHook{})
logger.Info().Msgf("Received requests.")

f:id:woodcock:20220214020729p:plain