ログとは何か
ログ(log)は、アプリやシステムで起きた出来事を、時刻や状況とともに残す記録です。画面に見える不具合だけでなく、その直前にどの処理が始まり、どこで失敗したかを後から調べる手掛かりになります。
ログは多ければよいものではありません。調査に必要な情報を残しながら、パスワード、APIキー、個人情報を記録しない設計が必要です。
一文でいうと
ログとは、「いつ、どの処理で、何が起きたか」を後から追うための出来事の記録です。
正常な開始と完了、警告、エラー、外部サービスとの通信結果などを、一定の形式で残します。利用者へ見せるエラーメッセージが次の行動を伝えるのに対し、ログは開発者や運用者が原因を調べるための詳細を担います。
個人開発のどこで登場するか
開発中は、ターミナルとは何かやブラウザの開発者ツールでログを見ます。公開後は、ホスティング先やサーバーとは何かの管理画面で、失敗した要求やバックグラウンド処理を調べます。
次のような問いへ答えられるログが役立ちます。
いつ問題が始まったか
どの処理が失敗したか
同じ要求のどの段階で止まったか
外部APIからどの種類のエラーが返ったか
修正後に同じ失敗が再発していないか
一件の失敗を追える形で残す
注文確認メールの送信に失敗した例を考えます。本文やメールアドレスを丸ごと残す代わりに、次のような情報を組み合わせます。
発生時刻と環境
処理名と、追跡用の要求ID
成功、警告、失敗の区分
外部サービスから返ったステータスの種類
秘密値を除いたエラー原因
同じ要求IDを受付、保存、メール送信の各ログへ入れると、離れた処理を一本の流れとして追いやすくなります。時刻の形式や重要度の分類も、途中でばらばらにしません。
メトリクスや利用者データと区別する
ログ:個々の出来事を記録する
メトリクス:件数、割合、時間などを集計した数値として捉える
トレース:一つの要求が複数の処理を通る流れを追う
データベースの業務データ:アプリの機能そのものに必要な記録
一つの障害調査で組み合わせることはありますが、保存目的は異なります。ログを利用者データの正本にしたり、すべての本文を無制限に保存したりしません。
秘密情報と個人情報を記録しない
OWASPは、認証トークン、パスワード、暗号鍵などをログへ直接記録しないよう示しています。フォーム入力、URL、リクエストヘッダー、例外内容には、意図せず秘密情報や個人情報が含まれる場合があります。
ログを追加するときは次を確認します。
調査に本当に必要な項目か
秘密値を除去または置換できているか
誰がログを閲覧できるか
改ざんや削除からどう守るか
どの期間で削除するか
漏えいが疑われる値は、ログ行を消すだけでなく、認証情報の失効と再発行も行います。保管方法は個人開発の秘密情報を安全に管理するで確認します。
次に読む記事
公開後の確認項目へつなげる場合はリリース後30日の運用カレンダーを読みます。画面のエラー文を改善する場合は親切なフォームエラーメッセージの作り方へ進み、利用者向けの説明と内部ログを分けます。