2009-10-03 22 views
7

Webアプリケーションのすべてのユーザーの各ページビューのログを保持したいと考えています。十分な時間が経過したら、そのログを使用してレポートを生成します。私はすべてのHTTPリクエストを記録する必要がないので、ロギングメカニズムを少しフレキシブルにしたいと思います。asp.net mvcのウェブサイトのユーザーの操作/操作を追跡しますか?

例は次のとおりです。会社が自分のWebアプリケーションにサインアップし、5人の従業員がアプリケーションを使用できるようにします。先週、3人の従業員がこのアプリケーションを使用したと報告したいと思います。または、今年の6月から8月の間に4人の従業員が使用したことを示します。

SQL Serverでasp.net mvcを使用しています(違いがある場合)。

これはこれと同じくらい簡単ですか? UserId、ControllerName、ActionName、ActionParameters、CreatedOnの列を持つSQLテーブルを作成します。次に、起動された各アクションのレコードをdbに追加するActionFilterAttributeを作成します。

私は(潜在的に大きなテーブルサイズ以外の)気になる落とし穴はありますか?

+2

Googleアナリティクスを使用し、解析できる「仮想URL」を追跡することが、よりスケーラブルなソリューションになる可能性があります。ようこそ/レポート/ ///その後、データフィードAPIを使用して応答を解析します。 –

+1

安全ではなく、ユーザーはJSをオフにしたり、GAをブロックしたりできます。 – queen3

答えて

6

落とし穴のいくつか:

  1. あなたは任意のサーバ・レベルのページのキャッシュを行うことができなくなります。
  2. 実際に各リクエストを記録しているので、たくさんのdbが書き込みます。
  3. ページ上で何らかのアクションが発生した場合、冗長な情報を格納する可能性があります。

これをカスタムのAuthorizeAttributeに実装すると思いますので、すべてのコントローラでそれをコーディングするのではなく、文字通り実際に必要以上のすべての要求になります。

IISログ解析ユーティリティの使用を検討しましたか?すでに必要な情報がたくさんあるでしょう。

0

IActionFilterインターフェイスを見てみましょう。これを実装する独自のクラスを作成し、必要なものをログに記録できます。

2

JavaScriptを使用する場合は、SiteCatalystの行に沿って何かを実装することもできます。ページロード時にクライアントからのJavaScriptを使用してリクエストを送信し、URL内の適切な情報を持つコントローラアクションに送信します。例えば:

www.example.com \ AnalyticsControllerアクション\ \ currentController \ currentAction userNameの\

利点は、あなたのロギングは、すべての他の操作と順に実行されていない、あなたはおそらく、それは入れて取り組んでもらうことができるということですマスターページのAJAX呼び出し。

欠点は、指摘されているように無効にできるJavaScriptを使用していることです。偽装するのも本当に簡単です。

関連する問題