GCPのCloud Runでzerologを使う
Golangでログと言えばzapを使っていましたが、以下の記事で他の良いロギングライブラリを知ることが出来、せっかくなので他のものを使ってみることにしました。
早見表を見て良さげだったので、特に何も考えずにZeroLogを選びました。
最近勉強がてらCloud Runを使っているので、この上で動かします。
つまりどころ
正直ブログにすることがないくらい、Readmeを見て速攻で使えてしまいました。
が、それでは困るので強いていうと、
デフォルトの使い方の通り
log.Info().Msgf("Received requests.")
などとしても、ログエクスプローラの画面上でSeverity(重大度)を表示させる事ができません。
(この※マークのようなものはデフォルトの意味だそうです)
そこでどのようにすれば良いかですが、ログメッセージに
{ "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.")