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 Robert Mühsig

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
    IIS & Windows Authentication – Troubleshooting mit Negotiate & NTLM

    Windows Authentifizierung ist eine einfache (und naheliegende) Authentifizierungs-Option für “Haus-interne” Webapplikationen. Setup Im IIS selbst kann man die Windows Authentifzierung sehr leicht anschalten: Natürlich kann man dies auch über die web.config steuern: <system.web> ... <authentication mode="Windows"/> ... </system.web> ... Fehlermeldung “HTTP Error 401.2 – Unauthorized”: Dies kann (wie fast immer) viele Gründe haben, z.B. weil ...

  • image.png
    Json-Online-Tools: Viewer & Json2Csharp Generator

    Wo APIs im Spiel sind, ist das JSON Format nicht weit. Da ich immer mal wieder zwei Tools benutze, möchte ich diese hier auch mal kurz würdigen. JSON Viewer Wer nur den JSON-Text vor sich hat sieht meist die Struktur nicht. Über JSON Viewer kann man sich recht einfach einen Überblick verschaffen: [URL] JSON2CSharp Der ...

  • image.png
    Tools & Vorgehen für Entwicklung rund um OpenXml oder wie erstelle ich Office Dokumente mit .NET?

    Durch meine Tätigkeit bei der  OneOffixx AG habe ich recht tiefe Einblicke in die Erstellung von Microsoft Office Dokumente mit .NET bekommen. Da das Problem “Office Dokumente per Code” zu erstellen recht verbreitet ist, schreib ich mal Empfehlungen für die ersten Schritte. Must Have Tools Ganz klar sollte man das Office in der jeweiligen Version ...

  • image.png
    Windows Phone SDK- & “System”-Icons

    Zwar legt das Metro Design viel Wert auf Typografie – jedoch sind auch Icons sehr wichtig. Wer das Windows Phone SDK installiert hat, bekommt 36 Icons mitgeliefert. Diese sind unter diesem Pfad zu finden: C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Icons Viele Icons, welche man von den eingebauten Anwendungen kennt, sind allerdings nicht enthalten. Pedro Lamas hat ...

  • image.png
    Wie finde ich heraus ob mein ADFS 2.0 funktioniert?

    Ich hatte mich recht lange mti dem Thema ADFS 2.0 (“Active Directory Federation Services”) beschäftigt und da kam die recht einfache Frage auf: Wie stelle ich fest ob die Verbindung zwischen ADFS und AD “funktioniert”? Hier eine simple Variante es zu testen… Was ist ein ADFS überhaupt? Wenn man über AD-Grenzen hinweg “Vertrauensstellungen” braucht, dann ...

Unterstützt von…

Facebook