log4net 1 appender 2个文件

时间:2018-06-12 11:34:11

标签: c# logging log4net

是否有可能为 log4net 设置一个appender,如果它符合阈值级别,它会将信息记录到两个文件中。如果它是调试它是INFO级别它将编写除调试之外的所有内容,它写入包括调试在内的所有内容并保留这两个。我可以使用两个appender来完成它,但是我想只有一个变量可以根据日志文件写入的阈值级别,只有一个或两者来计算。



 <appender name="Name" 
      type="log4net.Appender.RollingFileAppender,log4net">
      <file value="Path" />
      <treshold value="info" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="2000KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <Header value="[Start]&#13;&#10;" />
        <Footer value="[End]&#13;&#10;" />
        <ConversionPattern value="%-5level %message%newline" />
      </layout>
    </appender>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

您可以将log4net配置为使单个日志消息写入两个(或更多)不同的文件。您甚至可以让每个文件使用不同的阈值。

这里有一个示例,其中包含两个日志文件,一个名为basic.log,其中包含INFO或更高级别的消息,一个名为details.log,其包含DEBUG或更高级别的消息。该示例显示log.Debug()调用将其输出仅发送到details.log文件,而log.Info()调用将在两个文件中都输出。

这是主程序:

class Program
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
    static void Main(string[] args)
    {
        log4net.Config.XmlConfigurator.Configure();
        log.Debug("This is a debug message");
        log.Info("This is an info message");
    }
}

和app.config文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" />
  </startup>

  <log4net>
    <appender name="BasicFile" type="log4net.Appender.RollingFileAppender, log4net">
      <file value="C:\temp\basic.log"/>
      <threshold value="INFO"/>
      <appendToFile value="True"/>
      <layout type="log4net.Layout.PatternLayout">
        <Header value="[Start]&#13;&#10;" />
        <Footer value="[End]&#13;&#10;" />
        <ConversionPattern value="%-5level %message%newline" />
      </layout>
    </appender>

    <appender name="DetailsFile" type="log4net.Appender.RollingFileAppender, log4net">
      <file value="C:\temp\details.log"/>
      <threshold value="DEBUG"/>
      <appendToFile value="True"/>
      <layout type="log4net.Layout.PatternLayout">
        <Header value="[Start]&#13;&#10;" />
        <Footer value="[End]&#13;&#10;" />
        <ConversionPattern value="%-5level %message%newline" />
      </layout>
    </appender>

    <root>
      <level value="DEBUG"/>
      <appender-ref ref="BasicFile"/>
      <appender-ref ref="DetailsFile"/>
    </root>
  </log4net>
</configuration>

运行此命令时,c:\ temp \ basic.log仅包含INFO消息,而c:\ temp \ details.log则同时包含这两个消息。