扩展log4net - 向每个日志添加其他数据

时间:2011-03-19 00:59:46

标签: log4net metadata

我们正在使用log4net登录我们的应用程序。我们希望每次通话都能自动捕获某些信息。调用log.Info或log.Warn的代码应该正常调用它们,而不指定此信息。

我正在寻找一种方法来创建我们可以插入log4net的东西。 ILog应用程序之间的某些东西用于记录和appender,因此我们可以以某种方式将此信息放入日志消息中。进入ThreadContext或LogEventInfo。

我们希望捕获的信息与asp.net相关;请求网址,用户代理等。我们还要包含应用程序.config文件中的一些信息(应用程序ID)。

我希望在正常的ILog.Info和appender之间进行处理,以便第3方库自动包含此信息,这些库也使用log4net(Nhibernate,NServiceBus等)。

关于我想要的可扩展性的任何建议是什么?

由于

1 个答案:

答案 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;
    }
}

该对象是全局的,但是在处理请求的线程上调用该方法,从而获得正确的信息。我还建议您为每个“信息实体”创建一个类,以便您在日志目标中具有很大的灵活性。