我们正在使用log4net登录我们的应用程序。我们希望每次通话都能自动捕获某些信息。调用log.Info或log.Warn的代码应该正常调用它们,而不指定此信息。
我正在寻找一种方法来创建我们可以插入log4net的东西。 ILog应用程序之间的某些东西用于记录和appender,因此我们可以以某种方式将此信息放入日志消息中。进入ThreadContext或LogEventInfo。
我们希望捕获的信息与asp.net相关;请求网址,用户代理等。我们还要包含应用程序.config文件中的一些信息(应用程序ID)。
我希望在正常的ILog.Info和appender之间进行处理,以便第3方库自动包含此信息,这些库也使用log4net(Nhibernate,NServiceBus等)。
关于我想要的可扩展性的任何建议是什么?
由于
答案 0 :(得分:2)
您要查找的内容称为日志事件上下文。本教程解释了它的工作原理:
http://www.beefycode.com/post/Log4Net-Tutorial-pt-6-Log-Event-Context.aspx
特别是“计算的上下文价值”这一章对你很有意思。
<强>更新强>
我的想法是使用全球背景。很容易看出这对于像应用程序ID这样的东西是如何工作的(实际上你甚至不需要计算的上下文对象)。像请求网址这样的动态信息可以像这样完成:
public class RequestUrlContext
{
public override string ToString()
{
string url;
// retrieve url from request
return url;
}
}
该对象是全局的,但是在处理请求的线程上调用该方法,从而获得正确的信息。我还建议您为每个“信息实体”创建一个类,以便您在日志目标中具有很大的灵活性。