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.png
    Azure AppInsights: Ein mini Google Analytics für Websites

    Seit der Build Konferenz ist das neue Azure Portal für alle freigeschaltet. Durch das neue Portal ist mir ein “Dienst” aufgefallen, den ich bisher nicht gesehen hatte: Azure Application Insights Viel weiss ich nicht über den Dienst, aber wer eine Azure Website hat der sollte mal die “Analytics” Box öffnen. Im Grunde handelt es sich […]

  • image.png
    Source Code veröffentlichen – aber bitte mit Lizenz

    Seit es den Blog gibt wird auch meist der gesamte Demo Source Code mit veröffentlicht. Das Ganze hatte ich am Anfang noch als .zip verteilt, später lag es mal auf Google Code und nun liegen alle Samples und sonstige Sachen auf GitHub. Beim letzten User Group Treffen in Zürich mit dem Titel “Open Source: Get […]

  • Fix: Cannot convert from ‘CConnectProxy::_ComMapClass *’ to ‘AddInDesignerObjects::IDTExtensibility2 *’

    Mal einen etwas esoterischer Blogpost, welcher auftaucht wenn man zu viel mit Office Addins rumspielt. Der Fehler passiert beim Bauen von C++ Projekten, welchen diesen Typ benötigen. Lösung (auf 64bit Systemen): C:\Program Files (x86)\Common Files\DESIGNER>regsvr32 MSADDNDR.DLL And Rebuild. Meine lieben Kollegen hatte mir dies schon mehrfach gesagt, allerdings hatte ich es immer wieder vergessen Das […]

  • Gegen das Gesetz verstoßen: X Jahre Haft. Gegen die Terms of Use verstoßen: Bann auf Lebenszeit. Danke Google & co.

    Bei fast allen Diensten die man im Internet nutzen kann muss man den “Terms of use” zustimmen. Völlig logisch dass da natürlich drin steht was erlaubt und was nicht. Wenn man gegen diese Regelungen verstößt hat das Unternehmen natürlich das Recht etwas dagegen zu unternehmen. In der heutigen Welt beherrschen einige wenige Unternehmen die digitale […]

  • image.png
    RSS Feed samt Kommentaranzahl und andere nicht Standard Elemente mit dem SyndicationFeed auslesen

    Jetzt mal ein Blogpost ohne ein fancy NuGet Package: Seit .NET 3.5 gibt es die SyndicationFeed Klasse. Eine schon etwas ältere API, reicht aber aus um Atom bzw. RSS Feeds zu lesen. In diversen RSS Feeds gibt es aber Erweiterungen, welche man natürlich auch auslesen möchte. So gibt WordPress z.B. auch die Anzahl der geposteten […]

Amazon Shop

Facebook