3

Web アプリで log4net を使用しており、すべてのページ エラーを SQL サーバーに記録しています。それによって生成されたエントリ ID を取得する方法があるかどうか疑問に思っていました。ここにあるドキュメントから離れます

http://logging.apache.org/log4net/release/config-examples.html

この ID を参照番号として顧客に提示できるようにしたいと考えています。これにより、顧客は顧客サポートに連絡してシステムを検索し、ログ ファイルを確認する必要がなくなります。

4

3 に答える 3

4

floyddotnetが提案したように独自のアペンダーを作成することとは別に、次のことを検討できます。

  1. GUIDを使用します。アプリケーションで簡単に生成でき、ほとんどの目的に役立ちます。欠点:顧客が電話でサポートに伝えようとすると、不便になる可能性があります。メールサポートしかない場合は、これは問題ではない可能性があります。
  2. ロギングフレームワークの外部でインシデント番号を作成することを検討してください。ログテーブルのnull許容フィールドに保存したIDを返すストアドプロシージャをすばやく呼び出します。
  3. 上記の組み合わせ:GUIDを使用し、ログを記録した後、インシデントを作成してIDを返すストアドプロシージャを呼び出します。

IDを返すアペンダーを作成すると、アプリケーションと通常は使用しないアペンダーの間に依存関係が作成されます。Log4netは、ログ記録とログメッセージの書き込みを明確に分離して設計されています。必要なアペンダーは、その分離に影響を与えます。

于 2010-08-19T11:15:23.283 に答える
1

ID は log4net ではなくデータベースによって生成されるため、この情報を入手できるとは思えません。

このような条件で log4net を使用して行ったことは、メッセージにミリ秒までの日時スタンプを含め、それを参照番号としてユーザーに提示することです。次に、簡単な SQL クエリを実行して、ログ テーブル内のメッセージを取得できます。

于 2010-08-18T18:24:30.187 に答える
0

可能かどうかはわかりませんが、log4net 用の独自の Appender を作成して、この情報を log4net-context に保存できます。

log4net のアペンダーの書き方:

http://www.alteridem.net/2008/01/10/writing-an-appender-for-log4net/

コンテキストの説明:

http://logging.apache.org/log4net/release/manual/contexts.html

于 2010-08-18T18:25:14.913 に答える