środa, 29 stycznia 2020

C# - Log4Net

Poniżej chciałbym w krótkim poście opisać sposób uruchomienia biblioteki Log4Net.


[Źródło: https://docs.microsoft.com/en-us/dotnet/]

Na samym początku należy stworzyć plik o nazwie np. log4net.config. W nim przechowywane są konfiguracje logów generowanych z biblioteki.


Po jego stworzeniu w opcjach pliku Properties->Advanced należy zmienić parametr Copy to Output Directory z Do Not Copy na Copy Always. Bez ustawienia tego parametru nie zostanie ustawione żaden z parametrów logowania (Fatal, Warn, Info, Debug czy Error).

Przykładowa struktura wspomnianego pliku została przedstawiona poniżej:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.   <configSections>
  4.     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  5.   </configSections>
  6.   <log4net>
  7.     <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  8.       <file value="logFile.txt" />
  9.       <appendToFile value="true" />
  10.       <rollingStyle value="Size" />
  11.       <maxSizeRollBackups value="10" />
  12.       <maximumFileSize value="250KB" />
  13.       <staticLogFileName value="true" />
  14.       <layout type="log4net.Layout.PatternLayout">
  15.         <conversionPattern value="%date - %-5level - %logger [%property{NDC}] - %message%newline" />
  16.       </layout>
  17.     </appender>
  18.     <root>
  19.       <level value="ALL" />
  20.       <appender-ref ref="RollingFileAppender" />
  21.     </root>
  22.   </log4net>
  23. </configuration>

Następnie w pliku AssemblyInfo.cs należy wprowadzić następującą linijkę:

  1. [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

W celu zapisania wywołanej wiadomości należy:

  1. private static readonly log4net.ILog log =
  2.             log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  3. //....
  4. //....
  5. //....
  6. log.Info("Hello logging world!");
  7. log.Error("This is my error");

W celu weryfikacji czy wszystkie rodzaje wiadomości są uruchomione należy sprawdzić następujące wartości:

  1. bool fatalEnabled = log.IsFatalEnabled;
  2. bool warnEnabled = log.IsWarnEnabled;
  3. bool infoEnabled = log.IsInfoEnabled;
  4. bool debugEnabled = log.IsDebugEnabled;
  5. bool errorEnabled = log.IsErrorEnabled;

Gdy flagi będą ustawione na false to nie będzie zapisu danych w pliku w logach.

Można rozbudować sposoby wyświetlania danych. W celu wyświetlenia danych w konsoli wystarczy stworzyć następujący appender:

  1. <appender name="ConsoleData" type="log4net.Appender.ConsoleAppender">
  2.     <layout type="log4net.Layout.PatternLayout">
  3.         <conversionPattern value="%date - %-5level - %message%newline" />
  4.     </layout>
  5. </appender>
  6. //...
  7. //...
  8. //...
  9. <root>
  10.     <level value="Info" />
  11.     <appender-ref ref="ConsoleData" />
  12.     <appender-ref ref="RejestracjeLogs" />
  13. </root>

W ten sposób wszystkie dane z poziomu Info będą zapisywane do pliku opisanego w RejestracjeLogs oraz wyświetlone na konsoli.