Der Quasi-Standard zum loggen von Messages in dotNet Applikationen ist log4net, das Pendant zu log4j unter Java.
Dies ist eine Schritt-für-Schritt Anleitung zur Konfiguration und die ersten Schritte.
Die benötigten Dateien kann man auf der log4net Seite herunterladen
Abhängig davon, ob es sich um eine Applikation oder um eine Webanwendung handelt, ist die Konfiguration ein wenig anders. Auf die Unterschiede wird eingegangen.
Nach dem entpacken der ZIP Datei wird nur eine Datei benötigt. Relativ zum entpackten Ordner wird die Datei „bin/net/2.0/release/log4net.dll“ benötigt.
Diese kann grundsätzlich irgendwo auf dem System liegen. Damit die Applikation aber auch portabel auf verschiedenen Computern weiterentwickelt werden kann, wird die dll am besten in den Bin Ordner der Applikation verschoben.
Danach muss im Visual Studio der Verweis auf die dll über „Verweis hinzufügen → Durchsuchen“ erstellt werden.
Hier ist der erste Unterschied. Bei einer Webapplikation findet die Konfiguration in der Web.config Datei statt, bei einer Windows-Anwendung in der App.config.
Das folgende Beispiel zeigt die einfachste aller Konfigurationen auf:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net debug="false"> <appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net"> <param name="File" value="C:\error-log.txt" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d %-5p %c %m%n" /> </layout> </appender> <root> <priority value="ALL" /> <appender-ref ref="LogFileAppender" /> </root> </log4net> </configuration>
Diese Konfiguration ist so eingerichtet, dass sie direkt auf dem Laufwerk C: in die Datei error-log.txt loggt. Dies für alle Fehlerstufen (Siehe weiter unten.).
Relevant ist hier der XML-Knoten <section />, welcher zwingend im Bereich <configSections /> liegen muss, und der XML-Knoten <log4net />, welcher irgendwo innerhalb des <configuration /> Knoten eingefügt werden muss.
log4net muss beim Start der Applikation gestartet werden. Dies geschieht mit dem Befehl:
log4net.Config.XmlConfigurator.Configure();
Bei einer Windows Applikation geschieht dies in der Main Funktion der Applikation, bei einer Webanwendung am besten in der Datei „Global.asax“ in der Application_Start Methode. Falls die Datei nicht existiert, muss diese noch erstellt werden. Die besagte Methode sollte dann bereits vorhanden sein.
Nun sollte Log4net funktionieren.
Bei log4net gibt es verschiedene Loglevel, die verwendet werden können. Nachfolgend sind diese mit ihrer Bedeutung dargestellt:
| Bedeutung | |
|---|---|
| FATAL | Schwerwiegende Fehler, von denen sich das System oder die Anwendung nicht erholen kann und beendet werden muss(„Unrecoverable Error“) |
| ERROR | Fehlermeldungen, auf die der Operator oder Administrator reagieren muss |
| WARNING | Meldungen, die vom Operator an die Softwareentwicklungsabteilung übermittelt werden müssen und dort analysiert werden müssen, die aber den Betrieb wahrscheinlich nicht beeinträchtigen |
| INFO | Hinweise |
| DEBUG | Meldungen zu Debug-Zwecken für Entwickler |
Um einen Logeintrag zu generieren, muss zuerst der Logger initialisiert werden. Dies geschieht mit folgendem Befehl innerhalb einer Klasse oberhalb des Konstruktors:
private static readonly ILog log = LogManager. GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType bewirkt, dass für jede einzelne Klasse in der log4net Konfiguration ein anderer Logger verwendet werden kann. Dies erhöht die Flexibilität bei späteren Änderungen. Auch kann der Objektaufruf so per Copy-Paste weiterverwendet werden, ohne das man sich Gedanken dazu machen muss.
Nachfolgend wird anhand eines Debug Beispiels erklärt, wie der Logger funktioniert:
log.Debug("Dies ist eine Debugmeldung");
Falls alles korrekt integriert wurde, sollte sich nun unter C:\error-log.txt eine Datei mit der angegebenen Meldung als Inhalt befinden.
Wenn dem nicht so ist, muss die Konfiguration überprüft werden. Um herauszufinden, wo das Problem liegt, kann in der Konfiguration beim Knoten log4net der Parameter debug auf true gesetzt werden. Dies bewirkt, dass im Visual Studio per „Debuggen → Fenster → Ausgabe“ der Debug Output der Applikation ausgegeben werden kann.
Oft findet sich dort eine Meldung über das Problem. Erfahrungsgemäss hatte ich mal das Problem, dass die Assembly Referenz nicht gefunden werden konnte, obwohl der Verweis korrekt war. Der <section /> Knoten in der Konfiguration musste um weitere Parameter erweitert werden, welche im Debug Output genau angegeben wurden.