Voor een recent project was ik op zoek naar een goed logging framework voor gebruik binnen een C# ontwikkeling (Visual Studio 2010 / .NET Framework 4.0). Voorheen heb ik voor verschillende toepassingen gebruik gemaakt van log4net. Alleen is het wel van belang dat er nog actief aan ontwikkeld word zodat er ook eventueel support voor te krijgen is van de ontwikkelaar (of actieve community). Als je zoekt naar de activiteit binnen het log4net project dan blijkt dat hier de ontwikkeling wel zo’n beetje is gestopt bij .NET Framework 2.0.
Na een korte zoek tocht kwam ik terecht bij NLog. Qua werking is het nagenoeg hetzelfde als log4net, het is dus betrekkelijk eenvoudig om over te stappen of in te stappen. Onder de downloads is behalve de installer ook de source code te downloaden. Naast de downloads van de site zelf is er ook een pagina met externe tools voor het bekijken van logging. Hier staat onderandere Chainsaw bij, deze wordt ook veel gebruikt voor log4net. De tool die ik zelf heb geprobeerd is Sentinel, deze staat in het lijstje met tools die specifiek voor NLog zijn gemaakt.
Heel handig is dat na de installatie van NLog er templates beschikbaar zijn voor NLog files binnen Visual Studio (2005, 2008 en 2010). Hierbij kun je kiezen voor Empty, Typical en Console. Empty is ja.. euh leeg.. nou ja bijna alleen de meest elementaire xml tags staan in de file. Typical levert een configuratie op met logging naar file en tot slot de console versie levert een versie die ja… naar file schrijft. Binnen Visual Studio (in mijn geval 2010) werkt ook tijdens het kloppen van de NLog configuratie file de intellisense.
<?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"
autoReload="true">
<targets async="true">
<target name="file" xsi:type="File" fileName="d:\log.txt" />
<target name="viewer" xsi:type="NLogViewer" address="udp://127.0.0.1:9999" />
</targets>
<rules>
<logger name="*"
minlevel="Debug"
writeTo="viewer,file" />
</rules>
</nlog>
Bij het gebruiken van de bovenstaande configuratie zal er worden gelogd naar de file d:\log.txt en naar de viewer luisterend op adres 127.0.0.1 en poort 9999. Daarbij zal alles met een level boven of gelijk aan Debug worden gelogd. (Off, Debug, Trace, Info, Warn, Error, Fatal). Belangrijk is ook de autoReload=”true”, deze geeft namelijk NLog (ook net als log4net) de opdracht om zijn configuratie files automatisch opnieuw in te lezen en toe te passen bij een wijziging. Er zijn ook events die afgevangen kunnen worden met betrekking to het wijzigen en opnieuw toepassen van configuratie gegevens.
Om nu een heel eenvoudige log te doen volstaat de volgende code:
NLog.Logger _nLogger = NLog.LogManager.GetLogger("LoggingService");
_nLogger.Log(NLog,LogLevel.Info, "Test logging 1 2 3");
De eerste regel maakt de logger aan via de LogManager, hierbij geef je de naam van de aan te maken logger mee. Er wordt niet gegarandeerd dat wanneer je de naam van een bestaande logger mee geeft dat je ook de referentie terug krijgt naar die logger (althans volgens de chm file bij versie 2010.04.30.005). Daarna heb je meerde logging functies tot je beschikking.