Logger NLog installieren & konfigurieren

Der Logger NLog ist mit über 250M Downloads (in Nuget.org) einer der Standard-Logger für .NET/C#.
Davor verwendete ich den log4net Logger.

Um NLog zu verwenden müssen zwei Nuget-Packages installiert werden:

  1. NLog
  2. NLog.Config

Danach muss die NLog.config Datei im Projekt konfiguriert werden.
Hier ist eine einfache Konfiguration um die Logs in einer Datei zu schreiben sowie diese auch in Console farbig auszugeben:

Die Konfiguration dazu:

<?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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="T:\MyTemp\Logs\PGH.AssemblyParser and Converter\${shortdate}.log">

  <targets>

    <target
	name="coloredConsole"
	xsi:type="ColoredConsole"
	useDefaultRowHighlightingRules="false"
	layout="${longdate} [${pad:padding=5:inner=${level:uppercase=true}}] ${logger} - ${message}" >
			
      <highlight-row condition="level == LogLevel.Debug" foregroundColor="Green"  />
      <highlight-row condition="level == LogLevel.Info"  foregroundColor="Blue"   />
      <highlight-row condition="level == LogLevel.Warn"  foregroundColor="Yellow" />
      <highlight-row condition="level == LogLevel.Error" foregroundColor="Red"    />
      <highlight-row condition="level == LogLevel.Fatal" foregroundColor="Red"    backgroundColor="White" />
    </target>

    <target
	name="logFile"
	xsi:type="File"
	layout="${longdate} [${pad:padding=5:inner=${level:uppercase=true}}] ${logger} - ${message}"
	fileName="T:\MyTemp\Logs\MyApplication\${shortdate}.log" 
	keepFileOpen="false" 
	encoding="utf-8" />
  </targets>
  
  <rules>
    <!-- add your logging rules here -->
    <logger name="*" minlevel="Trace" writeTo="coloredConsole" />
    <logger name="*" minlevel="Trace" writeTo="logFile" />

    <!--
    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
    <logger name="*" minlevel="Debug" writeTo="f" />
    -->
  </rules>
</nlog>

Nun kann der Logger wie folgt im Code verwendet werden:

class Program
{
    // Create the logger for current class ( = typeof(Program)).
    private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();

    static void Main(string[] args)
    {
        Logger.Info("Starting application from Console...");
        // more code...
    }
}