これはおそらく不可能ですが、機能させる方法があるかどうか疑問に思っています。
ログ ステートメントが既に組み込まれている大規模な ASP.NET MVC43 アプリケーションがあります。
ここで、各ログ エントリにセッション オブジェクトの「会社名」の値を含める必要があります。セッションデータを読み取ってログエントリに含めるようにlog4netを構成することは可能ですか? それとも何か強制的に...?
アイデアをありがとう。
[編集] この質問は大いに役立ちました: ASP.NET で log4net を使用して、ログ ファイルに SessionID を含めるにはどうすればよいですか?
私はこれを私の解決策として終わらせました:
Global.asax.cs で:
// After the session is acquired, push the organization code into log4net's thread context, in case it has to log anything.
protected void Application_PostAcquireRequestState(object sender, EventArgs e)
{
if (Context.Handler is IRequiresSessionState && Session != null && Session[Constants.EMPLOYEE_DETAILS] != null)
log4net.ThreadContext.Properties["Company"] = ((EmployeeDetails)Session[Constants.EMPLOYEE_DETAILS]).Company;
}
log4net 構成:
<parameter>
<parameterName value="@Company"/>
<dbType value="String"/>
<size value="10"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{Company}" />
</layout>
</parameter>
うまく機能します-ログ出力に会社名が表示されるようになりました。助けてくれてありがとう、みんな。