每个组件层次结构的日志文件

时间:2010-03-29 20:16:52

标签: log4net

我有以下问题:

ComponentA with Unique Name
   ChildComponent
      ChildChild
   AnotherChild

每次创建ComponentA的新实例时,我想将输出重定向到名为ComponentA-UniqueName的唯一文件,包括所有子组件日志条目。

如何实现这一目标?

丹尼尔

2 个答案:

答案 0 :(得分:2)

开箱即用,动态更改appender很难做到。我会考虑记录到不同的介质,如数据库表,它可以过滤和分组日志数据。

<强>更新

使用contexts,您可以跨实例边界提供每个实例的信息。请考虑以下实现:

class ComponentA
{
    public void DoStuff()
    {
        using(log4net.ThreadContext.Stacks["component"].Push(this.Id))
        {
            childComponent.DoStuff();
        }
    }
}

class ChildComponent
{
    public void DoStuff()
    {
        using(log4net.ThreadContext.Stacks["component"].Push(this.Id))
        {
            childChild.DoStuff();
        }
    }
}

每当记录消息时(无论记录的是哪个组件),都包含当前的上下文堆栈。在appender配置中,使用%property{component}格式化程序输出组件堆栈的内容,其中包括ComponentA实例和ChildComponent实例的ID。

答案 1 :(得分:0)

我有一个对我们来说非常好的解决方案:

http://gist.github.com/387423

丹尼尔