リクエストごとにログIDを管理する方法について

はじめに

ALTURA X株式会社でバックエンドエンジニアを担当している秋山です。 今回の記事ではリクエストごとにログ管理を行う方法について書いていきたいと思います。

背景

バグの調査時には、ログを出力することがありますが、どのリクエストで出力されたログかわからないため、調査に時間がかかることがあります。
バグ調査の効率を上げるため、またリクエストごとに動作を変更することを考慮して、セッションごとにログIDを管理するようにしました。

サンプル実装

一意なIDを作成

セッションIDとしても管理したいためログIDを一意なIDで作成します。 今回はGo製のライブラリで簡単に一意なIDを作成できるを採用しました。

リクエストの共通設定

共通処理でログIDの発行と設定を行い、各機能で個別に設定不要になるようにしています。

ログIDの発行と設定

xidでログIDを発行しリクエストのコンテキストに紐づけを行います。

ログ出力

ログの発行を実際に行ってみましょう。 今回は、ログ出力のサンプルとして以下のメソッドを用意しています。
 
ログ出力を行う際、コンテキストをログ出力用のメソッドに引数として渡します。 このコンテキストを後続の処理に引数として渡すことで、それらの処理でも同一のログIDを使用してログ出力を行うことが可能になります。
 
以下は実際の出力結果です。
リクエストの開始から終了まで、共通のログIDを使用することができてます。
 
同時に複数のリクエストがあった場合でも、開始から終了までのログIDが上書きされず、共通のログIDを使用することが可能です。

まとめ

本記事ではリクエストごとに一意のログIDを出力する方法について説明させていただきました。
ログ出力方法について悩んでいる方の参考になりますと幸いです。