Allgemeines
In allen Websites, Web-Services, externen (easyLogic-) Prozessen etc. soll ein einheitliches Vorgehen zum Loggen von Fehlern und Debug-Informationen angewandt werden.
Dazu soll als Standard NLog eingesetzt werden: http://nlog-project.org/
Dokumentation https://github.com/nlog/NLog/wiki, speziell zu Config-Files: https://github.com/nlog/NLog/wiki/Configuration-file
Vorteile
- NLog übernimmt technische Details des Loggings (Dateizugriff, Archivierung etc.)
- NLog hat unterschiedliche Log-Level: ausführliche "DEBUG"-Informationen zur Entwicklungszeit; im Produktivbetrieb nur reduziertes Logging von Fehlern / Warnungen
- Der Umfang des Loggings kann zur Laufzeit per Konfigurationsdatei angepasst werden, ohne dass neu kompiliert werden muss
- Es kann verschiedene Ziele geben, an die Log-Output geschrieben wird (Logfiles, Datenbanken, E-Mail usw.)
Einbinden in ein Projekt
NLog kann in 3 einfachen Schritten integriert werden:
1. NLog als NuGet-Package einbinden:
- im Allgemeinen verwenden wir die aktuellste stabile Version
2. NLog.config hinzufügen:
Die angehängte Datei als "NLog.config" in das Projekt einbinden. Wichtig: "Build-Action: Copy Always" setzen!
Mit dieser beispielhaften Logdatei können zwei Arten von Logs geschrieben werden:
- (farbiges) Logging auf der Console (sofern es sich um eine Console-App handelt)
- Textfile im /log - Verzeichnis unterhalb des Application-Verzeichnisses (also zb. /wwwroot/WebApplication1/log oder /prozess/bin/release/log). Es wird täglich ein neues Logfile erzeugt und max. 30 Tage aufbewahrt (rolling log file).
3. Logstatements im Code einfügen:
In jeder Klasse, in der Logging erfolgen soll, muss ein Logger definiert werden:
private static Logger log = LogManager.GetCurrentClassLogger();
Mittels log.Debug(), log.Info(), log.Warn(), log.Error() die gewünschte Information loggen, z.B. so:
public class Global : HttpApplication
{
private static Logger log = LogManager.GetCurrentClassLogger();
void Application_Start(object sender, EventArgs e)
{
log.Info("Application starting");
// Code, der beim Anwendungsstart ausgeführt wird
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
try
{
log.Debug("Try to initialize the application.");
Initialize();
}
catch (Exception ex)
{
log.Error(ex);
}
log.Info("Startup done.");
}
private void Initialize()
{
int x = 0;
int y = 1 / x;
}
4. Ergebnis
2017-03-08 15:47:40.2254|1|INFO|WebApplication1.Global|Application starting 2017-03-08 15:47:41.0085|1|DEBUG|WebApplication1.Global|Try to initialize the application. 2017-03-08 15:47:41.0465|1|ERROR|WebApplication1.Global|System.DivideByZeroException: Es wurde versucht, durch 0 (null) zu teilen. bei WebApplication1.Global.Initialize() in c:\users\nweseloh\documents\visual studio 2015\Projects\WebApplication1\WebApplication1\Global.asax.cs:Zeile 47. bei WebApplication1.Global.Application_Start(Object sender, EventArgs e) in c:\users\nweseloh\documents\visual studio 2015\Projects\WebApplication1\WebApplication1\Global.asax.cs:Zeile 34. 2017-03-08 15:47:41.0555|1|INFO|WebApplication1.Global|Startup done.
Anhang / Referenz
Log-Level
Die unterschiedlichen Log-Level sollten nach folgenden Grundregeln benutzt werden:
| Level | wird genutzt für... |
|---|---|
| TRACE |
|
| DEBUG |
|
| INFO |
|
| WARN |
|
| ERROR |
|
Beispieldatei: NLog.config


