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.
Podoba Ci się to, co tworzę? Chcesz dostawać informacje o:
– wydarzeniach, które organizuję lub wspieram (np. konferencje, meetupy, webinary)
– inicjatywach, które organizuję lub wspieram (np. GeekWeekWro, DevAdventCalendar)
– moich prelekcjach, kursach i szkoleniach
– wyróżnionych artykułach z mojego bloga
0% SPAMu, 100% informacji! Krótko i na temat.
Pingback: C# Do Bazy - C# Sql Logowanie Do Bazy Danych Zakończone ... - Elektroda
Pingback: C# Logowanie Do Bazy - DaneLogowanie
Pingback: C# Logowanie Do Bazy - DanLogowanie