👾

ログについて(Not logarithm But log)

2020/10/14に公開

ログとは

数学者なら対数のことだというかもしれませんが、基本的にはコンピュータに関する情報を記録すること、またはその記録自体を指します。一応、有名どころからも意味を引っ張ってきますが、だいたい同じです。

ログとは、コンピュータの利用状況やデータ通信など履歴や情報の記録を取ること、またその記録を指す。操作やデータの送受信が行われた日時と、行われた操作の内容や送受信されたデータの中身などが記録される。
ITトレンドより引用

そしてサービス開発において、ログは以下の4種類に分けて考えることができます。

  • アクセスログ
  • エラーログ
  • デバッグログ
  • イベントログ(ユーザーログ)

アクセスログ

Webサーバへのクライアントからのアクセス記録のことを指します。内容としては

  • いつ
  • だれが
  • どこから
  • どのような操作をして
  • その結果はどうだったのか(リクエストの結果)

が記載されることが多いです。

普段はGoogle Analytics(以下、GA)や自前の管理ツールを使ってログを確認し、ユーザーの行動分析を行う際に使います。また、障害発生時には問題の原因を特定するためにサーバ内にあるアクセスログ(生データと呼んだりします)を見て、問題の原因を調べたりもします。

エラーログ

文字の意味のごとく、エラーが発生したときの記録です。

プログラム上のエラーがあったときや意図的にエラーを発生させることで、エラーログとして記録されます。
エラーログは、ブラウザ上に表示されることもあれば(開発環境で表示されるのは問題ないですが、本番環境で表示されるのは望ましくありません)、ログファイルとしてサーバに蓄積されることもあります。

最近では、一定のエラーが貯まったらSlackに通知するようになっているチームも多いです。

デバッグログ

不具合調査のために設置する記録です。

例えば、以下のコードで正の処理したいですが、当然実行されません。$hoge には ABC が入っていますが、正の処理が実行されるのは数字の 123 のときだけだからです。


$hoge = 'ABC';
if ($hoge === 123) {
    // 正の処理を実行する
    echo '正解';
}

こういう時に、if文の前で $hoge の中身を出力することで、なぜ正の処理が実行されないのかを調べることができます。


$hoge = 'ABC';
// $hoge が下のif文の条件を満たしているか調べるために、$hogeを出力する。
var_dump($hoge);
if ($hoge === 123) {
    // 正の処理を実行する
    echo '正解';
}

上のサンプルは極端な例ですが、実際にサービス開発をするなかでデバッグログはよく使います。

デバッグログは開発・テスト時に使うログで、製品版では使わないことが多いです。(もちろん、チームの方針によって残す場合もあります)

イベントログ(ユーザーログ)

最初のアクセスログとほぼ同義で、ユーザーがサービス内で行った行動に基づいて取られるログです。

Qiitaでいうと、

  • 〇〇の記事を読んだ
  • 〇〇の記事をいいね!した
  • △△さんをフォローした
  • プロフィールを変更した

等のログです。基本的に、ディレクターやマーケターからログを取れるようにして欲しいと言われたときのログは、たいていイベントログです。

こちらは、GAや自前の管理ツールを使ってログを確認し、ユーザーの行動分析を行う際に使います。アクセスログの違いとしては、アクセスログは指定のURLにアクセスがあったときにログとして記録を取るのに対し、イベントログはユーザーの行動に対してログとして記録を取ります。

例えばですが、ユーザーがスクロールをしただとか、ボタンとは関係ない箇所をタップしただとかのときに取るログはイベントログになります。(そういうログを取るかどうかは別として)

さらにややこしいですが、イベントログを送信する際にアクセスログも発生してしまいます。まあ、ここは気にする必要はないですが…。

ユーザーがイベントログの対象になる行動をする
↓
イベントログとしてサーバに送信する ← この通信自体はアクセスログになる

最後に

今回は4種類にログを分類して記載しましたが、ログの扱いはチームによって異なるかと思います。

そして、ログは取ろうと思ったらいくらでも取れてしまいますが、取れば取るほどノイズが増えてしまい大事な情報を見逃しがちになってしまいます。なので、ログを取る際にはきちんと用途をはっきりさせて取るほうが良いかなと思います。

Discussion