C# · Programowanie

Logowanie – konfiguracja NLog

Ostatnio miałam okazję konfigurować logowanie w aplikacji. Użyłam do logowania paczki NLog.

Plik konfiguracyjny NLog

Na samym wstępie musiałam do pliku konfiguracyjnego (app.config lub web.config) dodać odpowiedni wpis:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <variable name="logDirectory" value="logs/${shortdate}"/>

    <targets>
        <target name="infoconsole" xsi:type="ColoredConsole"  layout="${longdate} ${callsite} ${level} ${message}"/>
        <target name="debugfile" xsi:type="File" fileName="${logDirectory}/debugfile.txt"/>
        <target name="errorfile" xsi:type="File" fileName="${logDirectory}/errorfile.txt"/>
    </targets>

    <rules>
        <logger name="*" minlevel="Info" writeTo="infoconsole"/>
        <logger name="*" minlevel="Debug" writeTo="debugfile"/>
        <logger name="*" minlevel="Error" writeTo="errorfile"/>
    </rules>

</nlog>

Jak widać, plik składa się z 4 części. Poniżej opiszę każdą z nich.

Sekcja nlog

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

</nlog>

Sekcja nlog to tzw. root element.

Sekcja variable

<variable name="logDirectory" value="logs/${shortdate}"/>

W sekcji nlog można zdefiniować variable, które później można użyć w kolejnych krokach konfiguracji. W powyższym przypadku tworzymy zmienną o nazwie logDirectory, która tworzy ścieżkę sklejając nazwę folderu logs oraz datę w skróconej formie (o innych predefiniowanych zmiennych możecie poczytać w dokumentacji).

Sekcja targets

<targets>
	<target name="infoconsole" xsi:type="ColoredConsole"  layout="${longdate} ${callsite} ${level} ${message}"/>
	<target name="debugfile" xsi:type="File" fileName="${logDirectory}/debugfile.txt"/>
	<target name="errorfile" xsi:type="File" fileName="${logDirectory}/errorfile.txt"/>
</targets>

W sekcji targets możemy określić, gdzie ma być zapisywany output loggera. W powyższym przykładzie mamy 3 takie miejsca:

  • konsola z ustawieniem ColoredConsole (dzięki konfigurowalnym kolorom trochę bardziej czytelna, niż wersja Console), która dodatkowo będzie pisać komunikaty w określonym formacie (z wykorzystaniem predefiniowanych zmiennych longdate, callsite, level i message)
  • plik o nazwie debugfile.txt, który będzie zapisany w folderze o nazwie zdefiniowanej w zmiennej logDirectory
  • plik o nazwie errorfile.txt, który będzie zapisany w folderze o nazwie zdefiniowanej w zmiennej logDirectory

Sekcja rules

<rules>
	<logger name="*" minlevel="Info" writeTo="infoconsole"/>
	<logger name="*" minlevel="Debug" writeTo="debugfile"/>
	<logger name="*" minlevel="Error" writeTo="errorfile"/>
</rules>

W sekcji rules można zdefiniować kokretne loggery, które będą pisać do konkretnych miejsc. W przykładzie mamy do wyboru:

  • logger o minimalnym poziomie Info, który będzie pisał na konsolę komunikaty z poziomów Info-Warn-Error-Fatal
  • logger o minimalnym poziomie Debug, który będzie pisał komunikaty z poziomów Debug-Info-Warn-Error-Fatal do pliku zdefiniowanego w targecie o nazwie debugfile
  • logger o minimalnym poziomie Error, który będzie pisał komunikaty z poziomów Error-Fatal do pliku zdefiniowanego w targecie o nazwie errorfile

Konfiguracja NLog z poziomu kodu

Jest jeszcze inna opcja konfiguracji NLoga – z poziomu kodu. Ale tej części nie będę już opisywać, możecie o niej poczytać w dokumentacji.

Warto mieć na uwadze, że powyższe przykłady nie pochodzą z rzeczywistego projektu, są tylko przykładami pozwalającymi poznać kilka ciekawych zastosowań i konfiguracji loggera.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie na Google

Komentujesz korzystając z konta Google. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s