ログにはさまざまな情報を含めることができる。
マーフィーの法則:「ログにどんな情報を含めるべきかは、実際にその情報が必要になるまでわからない」
なので、何がおこったのかを把握できるように、できるだけの情報を含めるようにしよう。
以下のカテゴリごとに、おすすめの出力内容を説明する。
コンテキスト情報。Windowのワトソン博士(Drwtsn32.exe)みたいなもの。
関数呼び出しの入力と出力。
実行したコマンドとその所要時間。
複雑なシステムではさまざまなリソースを用いるので、その利用状況をログファイルで監視すればパフォーマンスの向上に役立つ。 かつて私がかかわったアプリケーションでは……(以下経験談が続く。データベースとのコネクションの確立やそのコネクションの利用をログに記録することで、最初のどの程度のコネクションを用意すべきかを判断したという話題)
さまざまな機能が使われた回数を記録する。たとえばDLLが呼び出された回数など。
設定パラメータの情報を記録する。パラメータが初期化されたことなども記録しておくべきだ。これは、後でレビューしたり分析したりするのに役立つ。
トランザクションの状態や累積リクエスト数、未処理のリクエスト数などを記録する。ログインやログアウト、セッションの異常終了、ログイン失敗の記録、同時利用ユーザー数なども記録するかもしれない。何を記録するかはビジネスモデルと密接に関わってくる。
開発者がログ機能を作ると、ついつい自分たちだけにしか意味のないものを出力しがち。お客様やサポート担当がそのログを使うことを考えると、そういった開発者向けの内容は別のログに切り分けておくことをおすすめする。