1

我有一个 ASP.NET 网站,我正在使用 log4net 进行日志记录。由于日志记录要求经常变化,我希望 PM 能够修改记录的信息,并能够记录额外的信息以在生产中进行调试(即无需重新编译)

我的计划是向 log4net 公开某些值,例如上下文中的 GET / POST 参数。要记录这样的参数,用户只需转到 log4net 配置并执行 %message{userId} 之类的操作

我找到了一种使用 log4net.ThreadContext 上的属性包的方法,但我不确定这是否没有副作用,即这些值保留了太长时间。

另一种方法是使用转发附加器,并在记录器被调用时注入额外的值,但我无法实现这一点,没有足够的例子。

有任何想法吗?

4

2 回答 2

1

你应该看看 log4net 中的 NDC(嵌套诊断上下文)。这将为您提供添加信息记录消息的可能性,例如设置堆栈:

using(log4net.NDC.Push("My extra info")){

} 

NDC 范围内的所有日志消息都将具有可用的 inner_context(模式布局格式):

[%ndc] - %message%newline
于 2012-10-31T12:40:11.790 回答
1

看看我对这个问题的回答。链接的问题和答案专门关于将用户名从 HttpContext.Current.User 添加到日志文件,但制作一个更通用的解决方案应该很容易满足您的需求。

它可能会为您提供一些关于如何将 HttpContext 中的信息合并到 log4net 日志记录中的想法。该线程中还有其他好主意。

于 2012-11-01T16:47:47.470 回答