10

Webアプリのユーザーのアクティビティログを実装したい(php+ js+ mysql)。

以前、私はこのアプローチを使用しました:

  • ユーザーのログイン時に、データベースに一時テーブルを作成してユーザーIDを保存します
  • activityその一時テーブルのユーザーIDを使用して、テーブルに行を挿入するすべてのテーブルのトリガーを作成します

今、私はデータベースにそれほど多くのロジックを入れたくないので、私の質問は次のとおりです。ベストプラクティスは何ですか?説明されている方法を使用する必要がありますか、それとも他の方法を使用する必要がありますか?

編集1

私はこの質問を見ましたが、説明されている方法を回答の方法と比較することに興味があります。

編集2

ログが必要な理由:問題が発生した場合にどのユーザーのせいにするかを知る必要があります=)

実際に何が変更されたかを確認するには、ログに変更されたデータと新しいデータが含まれている必要があります。

法人向けアプリであり、当社はそれほど大きくないため、ユーザー数は少ないでしょう。

主な質問は、ロギングロジックをどこに配置する必要があるかです:データベースまたはアプリケーション(phpバックエンド)レベル?

4

3 に答える 3

13

いつも通り「場合による」。

時間の経過に伴うコア ビジネス コンセプトの進化が重要である場合は、PHP ロジックだけでなく、データベース設計においてもそれを第一級のコンセプトにする必要があります。Fowler はこれについて「分析パターン」で書いています。これにより、誰がビジネス オブジェクトにどの変更を加えたかを把握し、「日付 z にプロジェクトをタイプ x から y に変更したのは誰ですか?」、「ユーザー x が製品 y を変更した頻度はどれくらいですか?」などの質問に答えることができます。など。ドメイン モデルがより複雑になります。

このレベルの統合が必要ない場合は、ロギング機能を PHP に組み込むことをお勧めします。トリガーは、データベースの速度を低下させたり、予期しない副作用を引き起こしたり、スキーマに変更を加える開発者によって忘れられたりする恐ろしい方法を持っています. したがって、PHP では、おそらくアスペクト指向のフレームワークを使用して、明示的な「log this」ステートメントを含めます (ただし、PHP では使用したことがなく、Java でのみ使用します)。

于 2012-07-16T11:08:14.313 に答える
10

logsロギングのために、セッションID $_SESSION['id'](セッションがあると仮定しますか?)とユーザーのアクティビティを記録するテーブルが必要です。次に、遅延 MySQL クエリを使用して挿入します (ログの優先度が高くないため)。

INSERT DELAYED INTO table (session_id, activity) VALUES ('1234', 'blah');

DELAYED 挿入の詳細については、このリンクを参照してください。

つまり、すべてのロジックを PHP 側に置き、遅延を使用してアクティビティをログに記録する MySQL テーブルを用意するだけです。これは、ログ可能なアクティビティがある場所ならどこからでも呼び出すことができる関数 log_activity($session_id, $activity) になります。

于 2012-07-16T08:40:48.167 に答える