2009-02-09 90 views
0

我正在设置多层应用程序中的log4net。我的日志记录大部分都是根据需要设置的,但现在我试图使.config中的<logger>条目以一种方式设置,以便在输出的级别上实现最大的灵活性。log4net嵌套记录器.config示例

我的记录器的命名约定去是这样的:。
ExecutableName.WorkerThreadName [ExternalModuleName(S)类名

在config文件我现在的记录仪定义部分看起来像:

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="MyAppender" /> 
</root> 

<logger name = "ExecutableName"> 
    <level value="FATAL" /> 
</logger> 

<logger name = "ExecutableName.WorkerThreadName"> 
    <level value="OFF" />  
</logger> 

<logger name = "ExecutableName.WorkerThreadName.ClassName"> 
    <level value="INFO" />   
</logger> 
<!--repeat as necessary---> 

希望你明白......看起来这有可能导致难以维护条目的混乱(特别是当应用程序达到支持阶段时)。
关于如何最好地管理嵌套记录器级别定义的任何建议?
我已经玩了一些实际嵌套的XML语句,但似乎并不奏效。

回答

2

一般我想抓住所有消息,至少WARNINGS和严厉的水平。由于记录器从层次结构中较高的记录器继承其级别并最终从根记录器继承其级别,因此我只将级别分配给顶级记录器。在你的情况下,这将是“ExecutableName”记录器。

对于那些我是例如特殊情况的记录器,对看到FATAL以外的其他消息不感兴趣我将添加特定的级别设置。但这通常不是一般情况,因此具有可管理的规模。

我觉得这很有用, WARN或INFO在那些顶级记录器上,然后在各个级别上使用appender和过滤器。其结果是潜在的大量消息根据级别分组到不同的存储中。您甚至可以为每个顶级记录器分别使用appender,以便对消息流进行更细致的控制。