- - PR -
Webアプリの操作履歴をログファイルに残したい
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-02 13:07
あくまでひとつのアイディアに過ぎませんが、ButtonのClick、DropDownListのSelectedIndexChangedなど、ログを出力させたいコントロール、イベントが特定できるのであれば、それらのコントロールを継承し、ログを出力する機能を追加したものを使用する、というのはいかがでしょうか?
すでにWebアプリケーションが作成済みの場合、コントロールを差し替えるのが面倒ですが、新規に開発するならば、こういう方法もありかな、と思います。
| ||||||||||||||||
|
投稿日時: 2005-08-02 13:31
こちらが参考になると思います。 Page_LoadでPostBackの元になったボタン等の識別 | ||||||||||||||||
|
投稿日時: 2005-08-02 15:12
おお!確かにそういう方法もありますね。 しかし、ご指摘の通り、画面は既にできてしまっているため、コントロールを差し替えるのが面倒すぎです(^^;
おをを!これです!これを探してたんです!! VB.NETに書き直すとこんな感じですかね。
あとは ・画面が巨大な場合ループ処理による性能への影響はないか? ・「ポストバックのきっかけになった操作」以外のイベントハンドラも記録しないといけないのか? という2点と、実装に必要な工数とをはかりにかけて実装方法を決めたいと思います。 ご回答頂いた皆様、ありがとうございました。m(_ _)m | ||||||||||||||||
|
投稿日時: 2005-08-03 05:40
すみません!投稿時間が限られている、ということで勘弁してください!!意図したことを正しく伝えられなかったようなので。
<実装方法その3> 各画面のクラスは、すべてのメソッドの冒頭に、ログ出力用のコードを書く。ただし、例えば [ PutLog(); ] のみ。 PutLog メソッド内で、StackTrace から呼び出し元メソッドを取得し、出力する。 つまり、この部分に注目。 > at sample.BaseForm.Page_PreRender(Object, EventArgs) > at System.Web.UI.Control.OnPreRender(EventArgs) Page_PreRender は、このコードを書いた場所ですよね。で、次の OnPreRender は Page_PreRender の呼び出し元なわけです。 ですから、PutLog メソッドで、StackTrace.GetFrame(1) は、現在実行中のメソッド(つまり PutLog)の呼び出し元(つまり、イベントハンドラ)になるのではないでしょうか? 実装方法その2のように、一度書いたらあとは何もしなくて良い、ってことにはなりませんが、実装方法その1のように、コピーしたあとに書き換えが必要、というわけでもなくなります。 #実装方法その1で行くにしても、 #PutLog(System.Reflection.MethodBase.GetCurrentMethod().Name); #だと、この行をコピーすればいいわけです。 | ||||||||||||||||
|
投稿日時: 2005-08-03 12:14
ああっ、こちらこそすみません。 Jittaさんの意図が全く伝わってなかったわけではないんです。 ただ、最近継承の便利さがようやく理解できてきたとこで、可能ならば「一度書いたらあとは何もしなくて良い」という究極の横着(?)を使ってみたかった、というのがありまして(^^; 今回は、仕様上、ポストバックのきっかけになった操作だけ記録すればいい方向に落ち着きそうなので、実装方法その2を推してみたいと考えてます。 しかし、実装方法その3、これはこれで便利ですね。オーバーロードの見分けもつきますし 後々使うことになるかもしれないんで、PutLog改良版も作ってみました。
|