Подключаем log4net. Пошаговая инструкция

в 20:39, , рубрики: .net, C#, log4net, refactoring, логирование, метки: ,

Как ни странно, но оказалось, что пошаговой инструкции для такой популярной библиотеки, как log4net, еще нет на Хабре. Исправляю эту недоработку.

Подключаем Nuget-пакет

Правой клавишей на References и выбираем Manage Nuget Packages:

image

В поисковой строке набираем log4net и находим пакет (в выдаче на первом месте):

image

Жмём кнопку «Install» и после установки пакета закрываем окно.

Создаем класс — обработчик.

Добавляем новый класс:

image

И называем его Logger:

image

Добавляем следующий код:

public static class Logger
    {
        private static ILog log = LogManager.GetLogger("LOGGER");


        public static ILog Log
        {
            get { return log; }
        }

        public static void InitLogger()
        {
            XmlConfigurator.Configure();
        }
    }

Не забудьте поставить ссылку на сборки в начале файла:

using log4net;
using log4net.Config;

Настраиваем конфиг

Теперь переходим к конфигу. В файле конфигурации App.config (или Web.config — если у вас это веб приложение) нужно внутри секции configuration добавить секцию log4net со следующим содержимым:

 <log4net>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="LogsExample.log"/>
      <param name="AppendToFile" value="true"/>
      <maxSizeRollBackups value="10"/>
      <maximumFileSize value="5MB"/>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d  %-5p %m%n"/>
      </layout>

    </appender>

    <logger name="LOGGER">
      <appender-ref ref="LogFileAppender"/>
    </logger>
  </log4net>

И сразу же после секции configuration должна стоять секция configSections, если её нет — добавьте (она должна быть первой) и внутри неё добавьте код для log4net. Если она одна — то выглядеть должно так:

   <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a" />
  </configSections>   

Полностью конфиг у меня выглядит так:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a" />
  </configSections>   
  <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>

  <log4net>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="LogsExample.log"/>
      <param name="AppendToFile" value="true"/>
      <maxSizeRollBackups value="10"/>
      <maximumFileSize value="5MB"/>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d  %-5p %m%n"/>
      </layout>

    </appender>

    <logger name="LOGGER">
      <appender-ref ref="LogFileAppender"/>
    </logger>
  </log4net>
</configuration>

Как видите имя логгера:

<logger name="LOGGER">

Совпадает с именем которое мы задали в классе Logger:

private static ILog log = LogManager.GetLogger("LOGGER");

По этому имени связывается конфиг с кодом класса-обработчика. Уже сейчас наш логгер готов к работе, просто добавьте следующий код:

Logger.InitLogger();//инициализация - требуется один раз в начале

Logger.Log.Info("Ура заработало!");

После запуска будет создана папка Logs и внутри будет файл Example.log с записью лога:

2016-09-21 10:59:41,104  INFO  Ура заработало!

Использование

Давайте немного изменим логику логирования. Выделим записи уровня Error и выше в отдельный файл (например отладочных записей у нас достаточно много и спам читать неудобно). Для этого добавим в конфиг следующее:

<appender name="ErrorFile" type="log4net.Appender.RollingFileAppender">
      <file value="LogsEquifax_SenderError.log"/>
      <appendToFile value="true"/>
      <maximumFileSize value="5MB"/>
      <maxSizeRollBackups value="10"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level %thread %logger - %message%newline"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="ERROR"/>
        <levelMax value="FATAL"/>
      </filter>
    </appender>

B добавим ссылку на аппендер:

    <logger name="LOGGER">
      <appender-ref ref="LogFileAppender"/>
      <appender-ref ref="ErrorFile"/>
    </logger>

Теперь секция log4net выглядит так:

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="LogsExample.log"/>
      <param name="AppendToFile" value="true"/>
      <maxSizeRollBackups value="10"/>
      <maximumFileSize value="5MB"/>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d  %-5p %m%n"/>
      </layout>

    </appender>
    <appender name="ErrorFile" type="log4net.Appender.RollingFileAppender">
      <file value="LogsExampleError.log"/>
      <appendToFile value="true"/>
      <maximumFileSize value="5MB"/>
      <maxSizeRollBackups value="10"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d %level %thread %logger - %message%newline"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="ERROR"/>
        <levelMax value="FATAL"/>
      </filter>
    </appender>
    <logger name="LOGGER">
      <appender-ref ref="LogFileAppender"/>
      <appender-ref ref="ErrorFile"/>
    </logger>
  </log4net>

И если мы изменим код программы на:

            Logger.InitLogger();//инициализация - требуется один раз в начале
            Logger.Log.Info("Ура заработало!");
            Logger.Log.Error("Ошибочка вышла!");

То увидим что появился еще один файл ExampleError.log — в него будут выводиться только ошибки:

2016-09-21 11:14:58,933 ERROR 8 LOGGER - Ошибочка вышла!

Ну а за подробностями стоит обратиться к официальной документации. Спасибо за внимание!

Автор: alz72

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js