12.4 構造化ログを出力する

AWSであればCloudWatch Logs、Google Cloundの場合はCloud Loggingというログ管理のサービスがあります。これらのサービスではログ表示のUIを提供しており、出力されたログをフィルタリングして検索したりできます。このようなサービスを利用するにあたって、利用しやすいログ形式が 構造化ロギング です。構造化ロギングはキーと値のペアを持つことができ、分析がしやすいログ形式です。どちらのサービスもJSON形式に対応しています。

構造化ログは標準出力に出力された内容をエージェントが収集し、これらのサービスに送信しています。このような場面で使えるGoライブラリとして有名なのが、rs/zerologgo.uber.org/zapです。本書では前者を取り上げます。「ライブラリがなくてもできる」と紹介しましたが、ログを整形して出力する、同一の設定で何度も出力する、といった場合には何らかのライブラリを使った方が便利です。 zerologは速度を売りにした構造化ログを出力するためのライブラリで、デフォルトでは標準出力などに出力します。このJSON作成時のパフォーマンスが高いライブラリです。標準のlogパッケージはお手軽ですが、構造化ログを出力するには手間がかかります。

12.4.1 zerologの基本とログレベル

zerologを利用するには次のようにインポートします。rs/zerolog/logは簡単に扱えるようにラップされたAPIで、rs/zerologの方が細かい設定ができる詳細なAPIになっています。

import (
    "github.com/rs/zerolog"
    "github.com/rs/zerolog/log" ...