Logging mit NLog

image.png

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 ]

Wenn dir der Blogpost gefallen hat, dann hinterlasse doch einen Kommentar. Wenn du auf dem Laufenden bleiben willst, abonniere unseren RSS Feed oder folge uns auf Twitter.

About the author

Written by

Hi, ich bin Robert Mühsig und bin Webentwickler und beschäftige mich mit Web-Frameworks auf dem Microsoft Web Stack und scheue mich auch nicht vor Javascript. Der Blog begann als "Problemsammelstelle und Lösungshilfe" und seitdem schreibe ich hier alles auf. Seit 2008 bin ich Microsoft MVP für ASP.NET. Treffen kann man mich online via Twitter (@robert0muehsig) oder hier.

One Response

  1. Hi Robert,
    für die Facade habe ich gerade Common.Logging für mich entdeckt. Es ist ebenfalls per Nuget verfügbar. Wahlweise mit den verschiedenen Logging Bibliotheken inklusive (http://netcommon.sourceforge.net/)
    Christian

    Reply

Comment on this post

Letzte Posts

  • image_thumb.png
    NuGet Package Restore & Build Server wie z.B. AppVeyor

    NuGet ist ja mittlerweile weit verbreitet, aber eine Frage stellt sich natürlich immer noch: Checkt man die NuGet Packages ein oder nicht? In meinem kleinen Side-Projekt, welches auf GitHub liegt und ich über AppVeyor auch bauen lasse nutze ich das Package Restore Feature von NuGet, d.h. in meinem Repository befindet sich kein NuGet Package mehr, […]

  • image.png
    Microsoft Account Login via ASP.NET Identity

    Der Microsoft Account ist die zentrale Identifikationsstelle in der “Consumer-Microsoft-Welt”, allerdings ist das Einbinden eben dieser in die eigene Applikation eher schwierig. Das “Live SDK” ist nun unter dem OneDrive Dev Center zu finden und ganz professionell wurden auch alle Links zum alten Live SDK damit unbrauchbar gemacht. Beim Microsoft Account ist es auch unmöglich […]

  • image.png
    Zeitgesteuerte Azure WebJobs – so einfach kann Azure sein

    Das noch in Entwicklung befindliche Azure WebJob SDK bietet einige coole Features zum Verarbeiten und Bereitstellen von Daten. Bekanntes Beispiel ist das Sample welches auf eine Azure Queue lauscht und sobald ein Item da vorhanden ist anfängt dies zu verarbeiten. Szenario: Zeitgesteuerte Aktivitäten – ohne Queue und co. Mein Szenario war allerdings wesentlich trivialer: Ich […]

  • image.png
    Get Involved in OSS! Ja, aber wie geht das denn mit GitHub?

    Auch im .NET Lager gibt es Bewegung im OSS Bereich und es gibt verschiedene Arten wie man bei einem Open Source Projekt “Contributed”. Was zählt alles zu “Contribution”? Unter “Contribution” läuft eigentlich alles – ob es Fragen/Probleme zu dem Projekt via Issues ist oder Dokumentation nachreicht oder ob man darüber bloggt oder das Projekt vorstellt. […]

  • HowTo: Web.config samt eigener ConfigSection zur Laufzeit ändern

    In dem HowTo geht es darum wie man die Web.config zur Laufzeit ändert und was es dabei zu beachten gilt. Das ganze klappt auch mit komplexeren ConfigSections. Eigene ConfigSection? Vor einer ganzen Weile habe ich mal über das Erstellen einer eigenen ConfigSection geschrieben – im Grunde nutzen wir jetzt fast dieselbe Config. Zur Laufzeit? Startet […]

Amazon Shop

Facebook