我有以下问题:
ComponentA with Unique Name
ChildComponent
ChildChild
AnotherChild
每次创建ComponentA的新实例时,我想将输出重定向到名为ComponentA-UniqueName的唯一文件,包括所有子组件日志条目。
如何实现这一目标?
丹尼尔
答案 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)