這可能是不可能的,但我想知道是否有辦法使它工作。在運行時使用log4net讀取並記錄HttpSession數據
我有一個大型的ASP.NET MVC43應用程序已經裝備了日誌語句。
現在,我們需要包括在每個日誌條目Session對象是「公司名稱」值。是否可以配置log4net來讀取會話數據並將其包含在日誌條目中?或者以某種方式強迫它......?
感謝您的任何想法。
[編輯] 這個問題幫了大忙:How can I include SessionID in log files using log4net in ASP.NET?
我結束了這是我的解決方案:
在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>
工程很好 - 我得到一個公司mpany名稱在我的日誌輸出中。感謝大家的幫助。
實現AppenderSkeleton非常容易(請參閱http://logging.apache.org/log4net/release/sdk/log4net.Appender.AppenderSkeleton.html)該實現可以引用靜態Session實例並添加信息。 –