2009-09-03 97 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

希望这会有所帮助。