20 January 2013 HowTo, NLog Robert Muehsig

Da ich in letzter Zeit immer mal wieder mit dem Logging Tool NLog zutun hatte, dachte ich mir ich schreib mal einen kurzen Einstieg – obwohl die Einstiegskonfiguration in 2 Minuten gemacht ist ;)

Ich hatte auch schon vor Ewigkeiten ein Log4Net Blogpost geschrieben. Im Grunde unterscheiden die sich nicht großartig.

NLog via NuGet beschaffen

Als Demoprojekt hab ich ein ASP.NET MVC 4 Projekt angelegt und lad mir via NuGet das NLog Configuration Package herunter, welches mir bereits ein leeres NLog Config-File anlegt und die Bibliothek einbindet.

image

NLog konfigurieren

image

In der Konfigurationsdatei von NLog kann man so genannte “Targets” und “Rules” festlegen. Vermutlich geht noch mehr, jedoch würde ich hier einfach in die recht gute Online-Doku schauen.

In meiner Konfiguration für den Blogpost möchte ich sowohl in den Debug Output Loggen als auch ein “tägliches” Logfile erzeugen.

 

 

 

 

 

 

 

<?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">

  <!-- 
  See http://nlog-project.org/wiki/Configuration_file 
  for information on customizing logging rules and outputs.
   -->
  <targets>
    <!-- add your targets here -->
    <target name="file" xsi:type="File"
            layout="${longdate} ${logger} ${message}"
            fileName="${basedir}/${shortdate}.log" />
    <target name="debug" xsi:type="Debugger"/>

    <!--
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
    -->
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="file" />
    <logger name="*" minlevel="Trace" writeTo="debug" />
    <!-- add your logging rules here -->
    
    <!--
    <logger name="*" minlevel="Trace" writeTo="f" />
    -->
  </rules>
</nlog>

NLog direkt aufrufen

Nun rufen wir einfach noch den Logger auf:

        public ActionResult Index()
        {
            NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

            logger.Info("Yeahhhh...");

            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

            return View();
        }

 Sollte dann dazu führen:

image

Empfehlung

Da es einige Log-Mechanismen gibt und manche Bibliotheken mal NLog oder mal Log4Net mitbringen wäre eine simple Facade um den eigentlichen Logger empfehlenswert – so kann man diese Komponente später einfacher austauschen.

Log4Net vs NLog

Wer sich diese Frage stellt, der sollte die erste Antwort auf Stackoverflow anschauen. Grob verkürzt: Sowohl Log4Net als auch NLog bieten ähnliche Features. Einfach das nehmen, was ohnehin mit einer Bibliothek mitkommt und eine Facade benutzen.

Es loggt nicht? Was mach ich falsch?

Häufigstes Problem ist, dass NLog evtl. die Konfigurationsdatei nicht findet. In einem solchen Fall nochmal in die Online Doku schauen. Zum Testen ob es vielleicht an etwas anderem liegt kann man auch die Konfiguration via Code setzen.

[ Demo Code @ GitHub ]


Written by Robert Muehsig

Software Developer - from Saxony, Germany - working on primedocs.io. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de