Wenn Sie Computercode in C # schreiben, empfiehlt es sich, Protokollierungscode einzuschließen. Auf diese Weise wissen Sie, wo Sie suchen müssen, wenn etwas schief geht. Die Java-Welt tut dies seit Jahren. Sie können dazu log4net verwenden. Es ist Teil von Apache log4j 2, einem beliebten Open-Source-Protokollierungsframework.
Dies ist nicht das einzige .NET-Protokollierungsframework. da sind viele. Der Apache-Name ist jedoch vertrauenswürdig und das ursprüngliche Java-Protokollierungsframework gibt es bereits seit mehr als 15 Jahren.
Wenn eine Anwendung oder ein Server abstürzt, fragen Sie sich, warum. War es ein Hardwarefehler, eine Malware, möglicherweise ein Denial-of-Service-Angriff oder eine ungewöhnliche Kombination von Schlüsseln, die es schafft, alle Ihre Codeprüfungen zu umgehen? Du weißt es einfach nicht.
Sie müssen herausfinden, warum ein Absturz aufgetreten ist, damit er behoben werden kann. Wenn die Protokollierung aktiviert ist, können Sie möglicherweise sehen, warum dies passiert ist.
Laden Sie die log4net-Datei von der Apache log4net-Website herunter. Überprüfen Sie die Integrität der heruntergeladenen Dateien mithilfe der PGP-Signatur oder der MD5-Prüfsummen. Die Prüfsummen sind nicht so aussagekräftig wie die PGP-Signatur.
Log4net unterstützt sieben Protokollierungsebenen, wobei die Priorität von "Keine" auf "Alle" erhöht wird. Diese sind:
Die höheren Ebenen schließen alle niedrigeren ein. Beim Debuggen zeigt die Verwendung von DEBUG alles, aber in der Produktion sind Sie möglicherweise nur an FATAL interessiert. Diese Auswahl kann auf Komponentenebene programmgesteuert oder in einer XML-Konfigurationsdatei getroffen werden.
Aus Gründen der Flexibilität verwendet log4net Logger, Appender und Layouts. Ein Logger ist ein Objekt, das die Protokollierung steuert und eine Implementierung der ILog-Schnittstelle ist, die fünf boolesche Methoden angibt: isDebugEnabled, IsInfoEnabled, IsWarnEnabled, IsErrorEnabled und IsFatalEnabled. Außerdem werden die fünf Methoden Debug, Info, Warn, Error und Fatal sowie Überladungen und fünf formatierte Zeichenfolgenversionen angegeben. Die vollständige ILog-Oberfläche finden Sie im Online-Handbuch von log4net.
Den Loggern wird eine der Ebenen zugewiesen, aber nicht ALL oder OFF, nur die anderen fünf.
Appender steuern, wohin die Protokollierung geht. Es kann sich um eine Datenbank, einen In-Memory-Puffer, eine Konsole, einen Remote-Host, eine Textdatei mit fortlaufenden Protokollen, das Windows-Ereignisprotokoll oder sogar um eine E-Mail über SMTP handeln. Insgesamt gibt es 22 Appender, die kombiniert werden können, sodass Sie eine große Auswahl haben. Appender werden an einen Logger angehängt (daher der Name).
Appender filtern Ereignisse nach übereinstimmenden Teilzeichenfolgen, Ereignisstufen, Ebenenbereichen und dem Beginn des Loggernamens.
Schließlich gibt es sieben Layouts, die einem Appender zugeordnet werden können. Diese steuern, wie die Ereignismeldung protokolliert wird, und können Ausnahmetext, Zeitstempellayouts und XML-Elemente enthalten.
Die Konfiguration kann zwar programmgesteuert, aber auch mit XML-Konfigurationsdateien durchgeführt werden. Warum bevorzugen Sie Konfigurationsdateien gegenüber Codeänderungen? Ganz einfach: Es ist viel einfacher, eine Konfigurationsdatei von einem Supportmitarbeiter ändern zu lassen, als einen Programmierer dazu zu bringen, Code zu ändern, eine neue Version zu testen und erneut bereitzustellen. Konfigurationsdateien sind also der richtige Weg. Der einfachste Weg ist das Hinzufügen von App.config zu Ihrem Projekt, wie im folgenden Beispiel gezeigt:
In der Online-Dokumentation zu log4net werden alle Felder der Konfigurationsdatei erläutert. Nachdem Sie App.config eingerichtet haben, fügen Sie mit log4net und dieser Zeile Folgendes hinzu:
[Assembly: log4net.Config.XmlConfigurator (Watch = true)]
Außerdem muss der eigentliche Logger mit einem Aufruf von LogManager.GetLogger (…) abgerufen werden. Der GetLogger wird normalerweise mit der typeof (Klasse) aufgerufen, in der er verwendet wird. Dieser Funktionsaufruf ruft jedoch auch Folgendes ab:
System.Reflection.MethodBase.GetCurrentMethod (). DeclaringType
In diesem Beispiel werden beide mit einem Kommentar angezeigt, sodass Sie auswählen können.
mit log4net;
[Assembly: log4net.Config.XmlConfigurator (Watch = true)]
Namespace gvmake
Klasse Programm
private static readonly ILog log = LogManager.GetLogger (System.Reflection.MethodBase.GetCurrentMethod
() .DeclaringType);
// privat statisch schreibgeschützt ILog log = LogManager.GetLogger (typeof (Program));
static void Main (string [] args)
log.Debug ("Application Starting");