データベースのデバッグにlog4netのadonetアペンダーを使用しています。ロギングレベルがエラーに設定されています。データベースロギングは、Oracleデータベース上の同じテーブルに書き込む異なるサーバーで実行されている2つのアプリケーション用に構成されています。テーブルの列はloginId、levelでした。私が直面している問題は次のとおりです。
ロギングレベルがエラーに設定されていても、一部の情報レベルのステートメントもテーブルに表示され、対応するレベルの列はエラーとして表示されています。
一部のステートメントの間に、ログインIDは、アプリケーションを実行している実際のユーザーのログインIDとは異なって表示されます。
したがって、自律的に動作するようにさまざまなサーバーでlog4netを構成する方法。
編集:これらの問題に直面しているのは、アプリケーションの複数のインスタンスを実行している場合のみです。それ以外の場合は、log4netロギングで問題ありません。
シナリオ:公開されたバージョンのアプリケーションを、ログインIDが異なる2つのブラウザーで参照し、ブラウザーごとに異なるフローを実行しました。その結果、ログインIDがごちゃごちゃになりました。コードのユーザーセッションからログインID値を取得し、log4net.GlobalContext.Propertiesに保存しています。
いくつかの調査の結果、http://logging.apache.org/log4net/release/manual/contexts.htmllog4net.GlobalContext.Properties
にある代替案があることがわかりました。グローバルの代わりに使うべきだと思います。ThreadContext.Properties
に保存することで問題に直面していると思いますlog4net.GlobalContext.Properties
。
問題1:コードを確認したところ、ステートメントはでしたlogger.info
。しかし、データベーステーブルでは、エラーレベルでログに記録されていました。
問題2:ログインIDのコード:
user = (User)Session["User"];
log4net.GlobalContext.Properties["LOGINID"] = user.Login;
web.configで。
global.propertiesの代わりにThreadContext.Propertiesを使用できると思われる場合は、login_idに使用する方法を教えてください。