Benutzerdefiniertes Logging & Protokollierung in Webanwendungen

Für normale Desktopanwendungen sind die Aufzeichnung der Logausgaben von List & Label mit Debwin und das integrierte Schreiben einer Protokolldatei einfache und praktische Lösungen.

Bei Webanwendungen, Windows-Diensten und Mehrbenutzersystemen geraten diese Vorgehensweisen aber an ihre Grenzen: Debwin und die integrierte Protokolldatei verwenden genau eine Logdatei je Prozess, sodass Logausgaben mehrerer, parallellaufender Jobs nicht getrennt werden können.

In diesen Situationen empfiehlt sich die Nutzung eines eigenen Logging-Mechanismus oder eines Logging-Frameworks wie NLog oder log4net. Sie können dazu eine Klasse erstellen, die von LoggerBase abgeleitet ist (oder selbst das ILlLogger-Interface implementiert) und ein Objekt dieser Klasse an den Konstruktor des ListLabel-Objekts übergeben. Anschließend werden alle Logausgaben von List & Label an dieses Objekt weitergeleitet. Die Logausgaben können anhand verschiedener Prioritäten (Debug-Ausgabe, Information, Warnung und Fehler) und Kategorien (z. B. Datenprovider, .NET-Komponente, Druckerinformation, etc.) gefiltert werden.

Im mitgelieferten "Custom Logger Sample" finden sich Beispiele für einen eigenen Logger und einfache Adapter-Klassen zur Anbindung der verbreiteten Logging-Frameworks NLog und log4net an List & Label.

 

Beispiel: Logausgaben an NLog weiterleiten:

ILogger   nlogLogger = NLog.LogManager.GetLogger("MyApp.Reporting");

ILlLogger llLogger = new ListLabel2NLogAdapter(nlogLogger);

ListLabel LL = new ListLabel(llLogger);

Bitte beachten Sie:

      Die Eigenschaften "Debug" und "DebugLogFilePath" der ListLabel-Klasse werden ignoriert, wenn Sie einen eigenen Logger übergeben.

      Beschränken Sie die Logausgaben in Ihrer ILlLogger-Implementierung mit Hilfe der WantOutput()-Funktion auf ein Minimum, um die Performance nicht zu stark zu beeinträchtigen.

      Die meisten der mitgelieferten Datenprovider unterstützen (optional) ebenfalls ein externes Logger-Objekt. Diese Datenprovider implementieren die Schnittstelle ISupportsLogger und verfügen über eine SetLogger()-Funktion. Falls ein Datenprovider kein eigenes Logger-Objekt hat, wird das der ListLabel-Instanz übernommen.

Tipp für NLog: Oft werden viele Logmeldungen in kurzer Zeit ausgegeben. Verwenden Sie das AsyncWrapper-Target für eine asynchrone Verarbeitung der Logausgaben, sodass List & Label nicht auf diese warten muss.