2010-05-26 80 views
1

我的問題看起來有點奇怪 - 我希望記錄轉換模式用於格式化使用特定appender時使用log4net記錄的消息。記錄log4net使用的conversionPattern值的首選方式是什麼?

舉例來說,如果我的log4net的部分看起來像這樣:

<log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <appender name="MainAppender" type="log4net.Appender.RollingFileAppender"> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <file type="log4net.Util.PatternString" value="${NCLOGS}\NC.Entities.Test${CI_TAG}.%processid.log" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <MaximumFileSize value="10MB" /> 
     <StaticLogFileName value="false" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="INFO" /> 
     <appender-ref ref="ConsoleAppender" /> 
     <appender-ref ref="MainAppender" /> 
    </root> 
</log4net> 

然後我想看看%日[%線程]%-5level%記錄儀 - %訊息%換行符日誌文件。

原理我使用Log4View查看我們的日誌,它需要轉換模式才能格式化消息。如果在日誌本身中找到轉換模式,我發現它很方便,這使我無需查找相應的配置文件並從那裏複製它。

現在我正在使用一些XPATH魔術,但我想知道是否有更好的解決方案,可能使用一些log4net API。

謝謝。

回答

0

執行此操作的一種方法是在啓動應用程序時將模式添加爲屬性。你可以從配置文件中讀取模式,也可以通過編程方式獲取每個appender的模式,在這種情況下,你可以爲每個appender添加一個屬性,然後爲每個appender爲每個模式記錄屬性。

像這樣添加屬性:

log4net.GlobalContext.Properties["PatternForAppender"]= getLoggerPattern(); 

而且這樣的事情,包括它在日誌中:

<conversionPattern value="%logger (%property{PatternForAppender}) [%level] - %message%newline" /> 
+0

有一個小誤會。我不希望每條日誌消息都包含這個模式 - 這是您的建議似乎實現的目標。我只是希望它在日誌文件的開頭記錄一次。 – mark 2010-06-02 07:34:11

+0

你是對的。這就是這樣做的。要在文件的開頭只記錄一次,你必須實現你自己的appender。 – jvilalta 2010-06-02 18:17:46

相關問題