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/]
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ę.
- <?xml version="1.0" encoding="utf-8" ?>
 - <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 - xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
 - autoReload="true"
 - throwExceptions="false"
 - internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
 - <!-- optional, add some variables
 - https://github.com/nlog/NLog/wiki/Configuration-file#variables
 - -->
 - <variable name="myvar" value="myvalue"/>
 - <!--
 - See https://github.com/nlog/nlog/wiki/Configuration-file
 - for information on customizing logging rules and outputs.
 - -->
 - <targets>
 - <target name="logfile"
 - xsi:type="File"
 - fileName="logs/Log.${longdate:cached=true}.log"
 - layout="${longdate}|${level:uppercase=true}|${logger}|${message}"
 - />
 - <target name="logfile2"
 - xsi:type="File"
 - fileName="logs/trace.${longdate:cached=true}.log"
 - layout="${longdate}|${level:uppercase=true}|${logger}|${threadid}|${message}|${exception:format=tostring}"/>
 - <target name="logconsole"
 - xsi:type="Console"
 - layout="${longdate}|${level:uppercase=true}|${logger}|${message}"/>
 - </targets>
 - <rules>
 - <logger name="*" level="Info" writeTo="logfile" />
 - <logger name="*" level="Trace" writeTo="logfile2" />
 - <logger name="*" level="Debug" writeTo="logconsole" />
 - </rules>
 - </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ę:
- using NLog;
 
Każda klasa korzystająca z logowania musi posiadać statyczne pole Logger. 
- private static Logger log = LogManager.GetCurrentClassLogger();
 
Wywołanie następuje po podaniu odpowiedniej funkcji z zapisem odpowiednich informacji:
- log.Info("Info {Name}", "Value");
 - log.Debug("Debug {0}", "TestVal");
 - log.Trace("Trace");
 - //logowanie błędów
 - catch (Exception ex)
 - {
 - log.Error(ex, "ERROR");
 - }
 
