首页 > 解决方案 > log4net 1 个附加程序 2 个文件

问题描述

如果满足阈值级别,是否有可能为log4net提供一个附加程序,它将信息记录到两个文件中。它是 INFO 级别,如果它是调试,它将写入除调试之外的所有内容,它会写入包括调试在内的所有内容,并只保留这两个。我可以使用两个附加程序来做到这一点,但是我希望只有一个变量可以根据日志文件写入的阈值级别、仅写入一个或同时写入两者来计算。

 <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>

标签: c#logginglog4net

解决方案


您可以将 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 有两条消息。


推荐阅读