巨人の足元でたじlog

そうして言葉を軽んじるから――― 君は私の言葉を聞き逃す

goのロギングについて、標準ライブラリのlogとzapをちょっと触ってみた所感

表題の内容について学習しました。

 

Goのロギングライブラリ 2021年冬

この記事を大いに参考にさせてもらいました。

goでは標準のログのライブラリがありますが、おそらくあんまりこれをそのまま使う事はしないのかなと思います。
というのも、標準ライブラリではログレベルの設定ができないみたいです。

現時点ではログ設計について正直あまり詳しくないですが、ログレベルを設定できないと言うのは自分レベルが見てもちょっと不便かなぁと思いました。
なので、ほんとに簡単にさくっとだけツールを作るときとか位しか使い所ないのかなと言う所感です。

★★★

て、どうやらzapと言うログのライブラリがデファクトになっているのかなあと言う感じがします。
いろんなソースを見たわけではないので全然確かな情報では無いですが、一旦そういうものとして理解してみます。

参照してた記事ではログライブラリはいろんなものが跋扈していたが、ザップの登場によってもうそれでいいじゃんというか最高じゃんみたいな感じになっているらしい。
高速に動作するのと、拡張性が高いというところがメリット。どうやら標準ライブラリよりも早いらしい。

★★★

いつもだったらQiitaのやってみた記事を見てみて、サンプルコードコピペして動いたってやって満足してたところ、もうエンジニアも5年位やっているのでそろそろ公式ドキュメントを 参照できるようにならないと まずいなと思い、今回はやってみた記事を見ないで 公式ドキュメントを見てサンプルとか動かしてみた。
README的なドキュメントの量がそんなに多くなかったたので読んだ内容をまとめてみると

- とりあえず爆速で動くよ
- なんかメモリとかをあんまり使わない感じでいい感じに実装しといたよ、だから早いんや
- 標準ライブラリより早いよ
- 構造化されたログを出力できるよ
- ゆるい型でログを出力したいならSugarを使って、 厳密にやりたいならそうじゃないやつを使うこともできるよ
- これら2つを併用することもできるよ
- zapはzapcoreの薄いラッパーだよ
- 先進的なツールとか、突飛な設定とか独自の設定をやりたいときは、zapcoreを自分たちで拡張して使うことができるよ

 

こんなところでしょうか。

余談ですが、DeepLのChrome拡張機能が便利すぎますね。

Google翻訳だとちょっとが長い文章だと拡張機能では使えなくなってしまうので、だめです。DeepLこそ至高。

★★★

標準のログライブラリも触ってみました。簡単にしか触ってないんですが、やっぱりログレベルがないと言うだけで使いづらいのかなあと言う気がします。
といいつつちゃんとロガーを使ってログの出力とかしたのはPythonだけなんですが。

goの標準モジュールもまだ主要なものも把握しきれてない部分もあるので、ファイルioとかそこら辺も周辺知識として整理できました。

ここでもちゃんとしたエンジニアになるために、Qiitaとかで調べる事はあまりせず、基本的なVSコードの補完で マウスオーバーしたときに出てくる説明とかで内容把握したり、引数を確認したりと言うことをやってみました。

こういうことがいわゆる緊急ではないが重要なことに分類されることなのかなぁと。

★★★

zapの 話戻ると、そもそも構造化されたログがなぜ必要なのかと言うと、現代の開発において(主にビックデータ領域なのかな?)、 ログはそのままログとして見るのではなくて、パイプラインとかでつないでログ基盤に集めて、そこで分析やら確認やらをするというのが多い?

そのためにそういった中間のツール群が連携しやすいように構造化されたログを出力したいという 要望があるみたいです。

これは以前データ基盤を使ってた時にもそういった形で連携をしてたので、なるほどそういうことかと言う腹落ちはしました。

一方で、データ基盤のようにデータそのものが大事である場合はそういった連携が必要なので構造化された形が良いのだけれども、単なるアプリケーションのログ、エラーログやデバッグのためのログとしては特に構造化する必要は無いのかなあと言う気もしています。

zapのログ出力のための記述もちょっと冗長なのかなと言う気もしたので、 ケースバイケースで使っていけばいいのかなぁと。ログ設計はいろいろ奥深そうなので、いろんなユースケースをもっと見てみたいなとちょっと興味がわきました。

★★★

次回課題としては、エラー発生時の ハンドリングとか、いい感じのログの出し方とかを整理してみたいです。

後は、今盲目的にzapが良いと少ない情報の中で信じているので、もう少し他の情報も漁ってみて、そもそもどういう観点で良い悪いの判断をするのかなというところを整理して、ログを残す際に必要なことがそもそも何なのかというところも少し深掘りしてみたいなと思ってます。

 

今日は3h40minくらい。

 

 

追記: zapがデファクトってのはさすがに嘘ついたかもしれないです。そんなこともなさそう。用途によって使い分けたいところですね。