2009-02-09 51 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,以便對消息流進行更細緻的控制。