【ろぎんぐ】

ロギング(ログ出力) とは?

💡 プログラムの「航海日誌」をつける仕組み
📌 このページのポイント
ロギング ― アプリケーションログのフロー アプリコード logger.info("...") logger.error("...") logger.warn("...") ログライブラリ レベルフィルタ フォーマット整形 タイムスタンプ付与 コンソール(標準出力) ファイル(app.log) 外部サービス(CloudWatch等) 出力例 2024-01-15T10:30:00Z [INFO] UserService - ユーザー登録完了 userId=12345 ロギングのベストプラクティス 適切なレベル選択 構造化ログ(JSON) 機密情報を含めない
ロギングのイメージ
ひよこ ひよこ

ロギングって何のためにやるの?console.logでいいんじゃないの?

ペンギン先生 ペンギン先生

開発中はconsole.logでもいいんだけど、本番環境ではログをファイルやログ収集サービスに記録する必要があるんだ。サーバーで障害が起きたとき「何時何分に何が起きたか」を追跡できるのはログだけだからね。いわばプログラムの「ブラックボックス」みたいなものだよ。

ひよこ ひよこ

ログレベルって何?

ペンギン先生 ペンギン先生

ログの重要度を段階分けしたものだよ。DEBUG(開発用の詳細情報)、INFO(正常な動作記録)、WARN(警告)、ERROR(エラー発生)みたいに分かれているんだ。本番環境ではINFO以上だけ出して、調査が必要なときだけDEBUGに切り替える、という使い方をするよ。

ひよこ ひよこ

ロギングで気をつけることってある?

ペンギン先生 ペンギン先生

一番やってはいけないのは「パスワードやクレジットカード番号をログに出す」こと。セキュリティ事故の原因になるからね。あとログを出しすぎるとディスクがすぐ満杯になるから、ログローテーション(古いログを自動で圧縮・削除する仕組み)を必ず設定しておくのが現場の鉄則だよ。

ひよこ ひよこ

構造化ログって何がいいの?

ペンギン先生 ペンギン先生

従来のテキストログは「2024-01-01 ERROR: ユーザー123のログインに失敗」みたいな文字列だけど、構造化ログはJSON形式で出力する。機械的に解析しやすいからElasticsearchやCloudWatch Logsで検索・集計・アラートが格段にやりやすくなるんだ。

ひよこ ひよこ

ログの分析ってどうやるの?

ペンギン先生 ペンギン先生

ELKスタックElasticsearch + Logstash + Kibana)やGrafana Lokiが定番ツールだよ。複数サーバーのログを集約して、ダッシュボードで可視化・アラート設定ができる。分散システムではOpenTelemetryでトレースIDをログに付与し、1つのリクエストが複数サービスを通過した流れを追跡する「分散トレーシング」も重要になってきているよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ロギング」って出てきたら「プログラムの動作記録を残して後から確認できるようにすることだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「logging」 = 記録すること
💬 logは元々「航海日誌」のこと。船の速度を測るために丸太(log)を海に投げたのが語源だよ
← 用語集にもどる