ラボ > PHP:各種エラー、プログラム全般

ログ出力する内容についてのメモ

ログ出力させるけど何があれば後々ラクなのか…そのメモ

作成日:2023-04-11, 更新日:2023-07-07

メモ

目的は問合せに対しての調査を容易にしたい

出力対象

ひとまずコレだけあったら大丈夫かな…?

  • アクセス日時
  • 対象ページ
    • URL
    • ページ名: 日本語だと分かりやすい
    • ファイルPATH、関数名、行数
  • 概要やメッセージ: 「何をしようとしたか?」「どうなったのか?」
  • アクセスした人の情報
    • UserAgent
    • IP
    • ログインしているならログイン情報(ユーザーIDやユーザー名)
    • セッションに持たせておくユニークキー(ログイン前後での情報紐づけ用だったり、一連の流れの紐づけだったり)
  • リクエスト情報: formなどの入力情報とか

※順不同

セッションに持たせておくユニークキー

セッションにユニークキーを持たせておきたい

  1. アクセスがあったらセッションチェック → ユニークキー発行
  2. ログイン前後でユニークキーをどうにかして引き継がせる
  3. ユニークキーの有効期限を設定しておく / アクセスする度に有効期限は更新(有効期限は1時間ぐらい?)

出力先

DB

ファイルよりDBのほうが使い勝手は良さそう。SQLで検索も簡単にできるし。

リクエスト以外はすべて各カラムを用意するとして、リクエストは…悩ましい

  • phpMyAdminとかで確認するなら…「var_dump()」の結果を文字列として保存したほうが使い勝手は良さそうな気もする
  • 専用にログを確認する何かを用意するならJSONが良さげ

ファイル

ファイルだと…検索すること考えると1行のほうが使い勝手は良さそうだけど、見づらさそうな気がする

  • すべて1行にする → 検索したときにその行だけ見ればOK。1行が長いと見づらい
  • 複数行にする → 各行に各項目を出力すれば見やすいけど、検索したあと、その前後を見ないといけない

複数行にするなら空白行で区切っておけば見やすくなる…けど、行数が増えてしまうってのが気分的にイヤ…だけど受け入れるしかないかも?
「正規表現を使って検索」するなら良いかもしれないけど…「正規表現を使って検索」すること自体が面倒

▼こんな感じのログになれば良さげかな?(※行数がエグいことになりそう → 調整したほうが良さげ)

2023-04-11 09:12:48 array (
  'key' => 'xxxxxxxxxxxxx',
  'ip' => 'xxx.xxx.xxx.xxx',
  'ua' => 'xxxxxxxxxxxxx',
  'url' => 'https://xxxx/user/edit',
  'path' => '/xxx/xxx/xxx.php xxx() line=123',
  'user' =>
  array (
    id => 'xxx',
    name => 'xxx',
  ),
)

2023-04-11 09:15:23 array (
  'key' => 'xxxxxxxxxxxxx',
  'ip' => 'xxx.xxx.xxx.xxx',
  'ua' => 'xxxxxxxxxxxxx',
  'url' => 'https://xxxx/user/edit/save',
  'path' => '/xxx/xxx/xxx.php xxx() line=123',
  'summary' => 'csrfのトークンが無い',
  'user' =>
  array (
    id => 'xxx',
    name => 'xxx',
  ),
  'request' =>
  array(
    email => 'xxx@xxx',
    name => 'xxx',
  ),
)

削除するタイミング

フレームワークを使っていて、そのフレームワークのやり方に丸投げするってなら問題なし

  • 保存期間: 1週間 or 数日 or 1ヵ月 or ?
  • 削除するタイミング
    • 任意の日時にcronで削除
    • 任意のタイミングで削除
    • 削除せずzipファイルに変更

削除するタイミング: 「任意のタイミングで削除」「削除せずzipファイルに変更」

たとえば、ログ出力時に過去のログファイルを確認して削除(or zipに変換・保存)させる

  • cronの設定が不要なので、環境が変わったときの設定漏れは無い
  • 毎回処理が走るので負荷がかかる…任意の時間帯の任意のアクセスがあったとき…とか条件を絞るのもありかも?