Как ни странно, но оказалось, что пошаговой инструкции для такой популярной библиотеки, как log4net, еще нет на Хабре. Исправляю эту недоработку.
Подключаем Nuget-пакет
Правой клавишей на References и выбираем Manage Nuget Packages:
В поисковой строке набираем log4net и находим пакет (в выдаче на первом месте):
Жмём кнопку «Install» и после установки пакета закрываем окно.
Создаем класс — обработчик.
Добавляем новый класс:
И называем его Logger:
Добавляем следующий код:
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