2009-09-03 100 views
98

我想寫日誌到來自同一進程的2個不同的日誌文件。配置Log4net寫入多個文件

是否可以使用log4net?

我需要爲每個日誌文件寫入單獨的消息。我怎麼能寫信給特定的appender?

+3

您無法登錄分離附加目的地 - 你需要配置不同的記錄器和附加適當的附加器到每一個。然後將不同的消息記錄到不同的記錄器。 – 2009-09-03 11:51:54

+0

以下是我的代碼,如配置做到了:http://stackoverflow.com/questions/27846157/configure-log4net-to-write-to-different-log-files-no-config-files – 2015-01-09 21:34:14

回答

67

是的,只需將多個FileAppenders添加到您的記錄器。例如:

<log4net> 
    <appender name="File1Appender" type="log4net.Appender.FileAppender"> 
     <file value="log-file-1.txt" /> 
     <appendToFile value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date %message%newline" /> 
     </layout> 
    </appender> 
    <appender name="File2Appender" type="log4net.Appender.FileAppender"> 
     <file value="log-file-2.txt" /> 
     <appendToFile value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date %message%newline" /> 
     </layout> 
    </appender> 

    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="File1Appender" /> 
     <appender-ref ref="File2Appender" /> 
    </root> 
</log4net> 
+2

不錯.. :)但是,我需要爲每個日誌文件編寫單獨的消息。我怎麼能寫信給特定的appender? 感謝。 ofer – ofer 2009-09-03 10:49:44

+2

@ ofer-請參閱我的答案如何做到這一點。 – RichardOD 2009-09-03 15:48:46

+0

如果您希望File1Appender記錄DEBUG錯誤並使用File2Appender記錄錯誤錯誤,該怎麼辦? – JsonStatham 2014-05-08 13:48:22

51

Vinay是正確的。回答你在他的回答中的評論,你可以這樣做的一種方法如下:

<root> 
    <level value="ALL" /> 
    <appender-ref ref="File1Appender" /> 
</root> 
<logger name="SomeName"> 
    <level value="ALL" /> 
    <appender-ref ref="File1Appender2" /> 
</logger> 

這就是我過去的做法。然後,像這樣對其他日誌:

private static readonly ILog otherLog = LogManager.GetLogger("SomeName"); 

,你可以得到你的正常記錄如下:

private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

閱讀文檔的loggers and appenders節以瞭解如何工作的。

+3

我有這樣的*同*設置我的應用程序之一,它不工作對我來說:( – 2010-09-08 12:25:14

+0

謝謝,工作就像一個魅力。 – VoodooChild 2012-09-26 00:02:46

+0

這個討論是很老了......希望你能回答......我想你的方法,但兩個記錄器記錄相同的消息。作爲log.Info(「」)和otherLog .INFO(「」)消息寫入兩者同時進行的日誌文件。 – SutharMonil 2014-01-14 07:46:12

145

這些答案是有幫助的,但我想分享我的答案與app.config部分和C#代碼部分,所以有較少的猜測下一個人。

<log4net> 
    <appender name="SomeName" type="log4net.Appender.RollingFileAppender"> 
    <file value="c:/Console.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Composite" /> 
    <datePattern value="yyyyMMdd" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="1MB" /> 
    </appender> 
    <appender name="Summary" type="log4net.Appender.FileAppender"> 
    <file value="SummaryFile.log" /> 
    <appendToFile value="true" /> 
    </appender> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="SomeName" /> 
    </root> 
    <logger additivity="false" name="Summary"> 
    <level value="DEBUG"/> 
    <appender-ref ref="Summary" /> 
    </logger> 
</log4net> 

然後在代碼:

ILog Log = LogManager.GetLogger("SomeName"); 
ILog SummaryLog = LogManager.GetLogger("Summary"); 
Log.DebugFormat("Processing"); 
SummaryLog.DebugFormat("Processing2")); 

這裏C:/Console.txt將包含 「處理」 ... 和\ SummaryFile.log將包含 「Processing2」

+41

我只是想喚起注意記錄器上的additivity =「false」屬性,以防止所有內容都記錄到根目錄。 – 2011-04-06 23:58:16

+1

這是log4net功能的一個很好的例子。謝謝! – crush 2014-12-09 14:51:08

+1

非常感謝,爲您效勞 – Zaragon 2015-03-27 15:31:39

33

我想要將所有消息記錄到根記錄器,並且要單獨記錄有錯誤,以下是如何完成的:

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="allMessages.log" /> 
     <appendToFile value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="ErrorsFileAppender" type="log4net.Appender.FileAppender"> 
     <file value="errorsLog.log" /> 
     <appendToFile value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date %-5level %logger - %message%newline" /> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
      <levelMin value="ERROR" /> 
      <levelMax value="FATAL" /> 
     </filter> 
    </appender> 

    <root> 
     <level value="ALL" /> 
     <appender-ref ref="FileAppender" /> 
     <appender-ref ref="ErrorsFileAppender" /> 
    </root> 
</log4net> 

注意使用過濾元件。

0

使用下面的XML配置配置登錄到兩個或多個文件,

<log4net> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="logs\log.txt" />   
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout">   
     <conversionPattern value="%date [%thread] %level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    <appender name="RollingLogFileAppender2" type="log4net.Appender.RollingFileAppender"> 
     <file value="logs\log1.txt" />   
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout">   
     <conversionPattern value="%date [%thread] %level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="All" /> 
     <appender-ref ref="RollingLogFileAppender" /> 
    </root> 
    <logger additivity="false" name="RollingLogFileAppender2"> 
    <level value="All"/> 
    <appender-ref ref="RollingLogFileAppender2" /> 
    </logger> 
    </log4net> 

上面的XML配置登錄到兩個不同的文件。

爲了得到記錄器編程的具體實例,

ILog logger = log4net.LogManager.GetLogger ("RollingLogFileAppender2"); 

您可以附加log4net的根元素中兩個或兩個以上的appender元素用於登錄到數倍的文件。

關於上述XML配置結構或附加器是最適合你的應用程序,從下面的鏈接瞭解詳細更多信息,

https://logging.apache.org/log4net/release/manual/configuration.html https://logging.apache.org/log4net/release/sdk/index.html

希望這會有所幫助。