log4net 1 приложение 2 файла - PullRequest
0 голосов
/ 12 июня 2018

Есть ли возможность иметь одного аппендиата для 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>

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете настроить 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 содержит оба сообщения.

...