czwartek, 30 kwietnia 2020

C# - NLOG

W tym poście chciałbym krótko opisać sposób wykonywania logów za pomocą pakietu NuGet NLOG.


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

Instalacja pakietu odbywa się przez NuGet:



Informacje o NLOG można znaleźć na stronie https://github.com/NLog/NLog/wiki/Tutorial.

Po zainstalowaniu w projekcie pojawi się plik NLog.config który będzie zawierał konfigurację biblioteki.

Poniżej prosta konfiguracja zawierająca zapis wiadomości do dwóch plików na konsolę.

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  3.       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.       xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
  5.       autoReload="true"
  6.       throwExceptions="false"
  7.       internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
  8.  
  9.   <!-- optional, add some variables
  10.   https://github.com/nlog/NLog/wiki/Configuration-file#variables
  11.   -->
  12.   <variable name="myvar" value="myvalue"/>
  13.  
  14.   <!--
  15.   See https://github.com/nlog/nlog/wiki/Configuration-file
  16.   for information on customizing logging rules and outputs.
  17.    -->
  18.   <targets>
  19.     <target name="logfile"
  20.             xsi:type="File"  
  21.             fileName="logs/Log.${longdate:cached=true}.log"
  22.             layout="${longdate}|${level:uppercase=true}|${logger}|${message}"
  23.             />
  24.     <target name="logfile2"
  25.             xsi:type="File"  
  26.             fileName="logs/trace.${longdate:cached=true}.log"
  27.             layout="${longdate}|${level:uppercase=true}|${logger}|${threadid}|${message}|${exception:format=tostring}"/>
  28.     <target name="logconsole"
  29.             xsi:type="Console"
  30.             layout="${longdate}|${level:uppercase=true}|${logger}|${message}"/>
  31.   </targets>
  32.  
  33.   <rules>
  34.     <logger name="*" level="Info" writeTo="logfile" />
  35.     <logger name="*" level="Trace" writeTo="logfile2" />
  36.     <logger name="*" level="Debug" writeTo="logconsole" />
  37.   </rules>
  38. </nlog>

W celu zapisania różnych danych wykorzystuje się różne poziomy logowania danych:

  • Trace - wykorzystywany do zapisywania dokładnych logów z przebiegu działania aplikacji.
  • Debug - Informacja do debugowania
  • Info - informacje.
  • Warn - ostrzeżenia. Przeważnie nie zdarzenia krytyczne.
  • Error - Błędy oraz wyjątki. Najczęściej używane np w Exception. Po których aplikacja działa poprawnie.
  • Fatal - Najwyższy poziom. Rejestracja błędów krytycznych uniemożliwiających poprawne działanie aplikacji.

Poniżej przykładowe wywołanie kilku informacji z wykorzystaniem powyższego pliku config. 

Najpierw do pliku należy dołączyć bibliotekę:

  1. using NLog;

Każda klasa korzystająca z logowania musi posiadać statyczne pole Logger. 

  1. private static Logger log = LogManager.GetCurrentClassLogger();

Wywołanie następuje po podaniu odpowiedniej funkcji z zapisem odpowiednich informacji:

  1. log.Info("Info {Name}""Value");
  2. log.Debug("Debug {0}""TestVal");
  3. log.Trace("Trace");
  4.  
  5. //logowanie błędów
  6. catch (Exception ex)
  7. {
  8.     log.Error(ex, "ERROR");
  9. }