这可能是不可能的,但我想知道是否有办法让它工作。
我有一个大型 ASP.NET MVC43 应用程序,该应用程序已经配备了日志记录语句。
现在我们需要在每个日志条目中包含来自 Session 对象的“公司名称”值。是否可以将 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>
效果很好 - 我现在在我的日志输出中得到了一个公司名称。谢谢大家的帮助。