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.