Lade...
 

Logging

Logging

Technische Dokumentation

Beim Logging protokolliert ClassiX® verschiedene Zustände, Fehlermeldung, Tätigkeiten usw. mit und schreibt diese in einem bestimmten Format in ein bestimmtes Medium, z.B. in eine Datei.

Eine extlnk.giflog4j-kompatible Logging-Bibliothek übernimmt hier den technischen Part.

Die Konfigurationsdatei befindet sich im System-Verzeichnis des ClassiX®-Systems (siehe CX_SYSTEM) und heißt logging.ini. Der Dateiname kann über die Kommandozeile oder per Umgebungsvariable verändert werden:

  • Kommandozeilenparameter -l: cx_osr.exe -l mylog.ini
  • Umgebungsvariable: SET CX_LOGGING_INI=mylog.ini

Die Umgebungsvariable hat die höchste Priorität.

Die Konfigurationsdatei besteht aus zwei Teilen: Den Loggern und den Ausgabemedien. Im folgenden Beispiel sind zwei Logger beschrieben, die in ein Ausgabemedium (eine Datei) schreiben:

Aufbau der Logging.ini
#this specifies the default Level: INFO log4cplus.rootLogger=INFO, FILE_LOGGER log4cplus.OrganizeLogsByDate=true log4cplus.appender.FILE_LOGGER=log4cplus::RollingFileAppender log4cplus.appender.FILE_LOGGER.File=${CX_LOGFILENAME}.log log4cplus.appender.FILE_LOGGER.ImmediateFlush=true log4cplus.appender.FILE_LOGGER.Append=true log4cplus.appender.FILE_LOGGER.MaxFileSize=5MB log4cplus.appender.FILE_LOGGER.MaxBackupIndex=10 log4cplus.appender.FILE_LOGGER.layout=log4cplus::PatternLayout log4cplus.appender.FILE_LOGGER.layout.ConversionPattern=%D{%Y-%m-%d %H:%M:%S,%q} %5x %5p %c - %m%n #this specifies, which loggers should be appended at which level log4cplus.logger.cx.main=ALL log4cplus.logger.cx.pool=WARN

Option: log4cplus.OrganizeLogsByDate

198837

Ist diese Option gesetzt, dann ergänzt ClassiX die Umgebungsvariablen CX_LOGFILENAME und CX_CHANGELOGFILENAME um einen Datumspräfix (/YYYY/MM/DD/Logfilename), damit das SystemOut-Verzeichnis nicht mit Dateien überläuft und man recht einfach alte Logs löschen kann.

ACHTUNG: Es kann vorkommen, dass Logs vom WebService vom Vortag oder noch früher stammen. Es ist dann sehr schwer diese Logs zu finden, wenn man diese Option gesetzt hat.

 

Logger

Ein Logger ist ein Objekt, das alle Meldungen einer bestimmten Kategorie (und deren Unterkategorien) sammelt und in ein oder mehrere Medien schreibt. Die Meldungen kommen vom ClassiX®-System selbst, über SystemObject::Log können aber auch selbst solche Meldungen erzeugt werden.

Im Beispiel wird der Ur-Logger "rootLogger" mit dem Level INFO und dem Medium FILE_LOGGER konfiguriert. Alle anderen Logger sind von "rootLogger" abgeleitet, erben also dessen Eigenschaften. ClassiX®-Logger beginnen üblicherweise mit "cx.".

Die Meldungen "Programmstart" und "Programmende" z.B. werden dem Logger "cx.main" zugestellt. Damit diese immer im Logbuch erscheinen, wird der Logging-Level auf ALL hoch gestuft.

Logger Bedeutung Hinweis
cx.access
193468
Durch cx.change abgelöst. Ab Dll-Version 223726 nicht mehr unterstützt.  
cx.change
198900

Spezieller Logger, der alle Objektänderungen während DrainWindow rausloggt sobald er auf TRACE gestellt wird. (Hinweise zur Einrichtung)

 
cx.accesscontrol Meldungen zu CX_ACCESS_CONTROL Ab DLL-Version 177533
cx.app Allgemeine Meldungen der Applikation, z.B. Fehlermeldungen oder Meldungen via CX_SYSTEM_OBJECT::Log

Unter DEBUG wird beim Laden von Quelldateien (auch .ini, .ext, ...) ausgegeben, in welchen Verzeichnissen gesucht und wo die Dateien gefunden wurden.
 
cx.app.crashdumps Unter INFO Statusmeldung, falls sich ClassiX mit einem neuen OOPS-Prozess verbunden hat.

Unter WARN Warnung, falls der Pfad der Crashdump-Datei gekürzt werden musste.
 
cx.arena Unter DEBUG wird bei der Initialisierung der Arena die verwendete Speichergröße in Bytes geloggt.  
cx.as Meldungen der Address-Space Verwaltung (Marker)
Seit 64-Bit wird kein AS-Handling mehr durchgeführt.
 
cx.basic Meldungen der Basisklassen bzw. der Basis-Infrastruktur  
cx.basic.numeric Logger für CX_NUMERIC. Loggt Fehler beim Export oder Format.  
cx.basic.string Loggt warnungen beim String-Export von zu langen CX_STRINGs  
cx.basic.unit    
cx.birt Informationen zur Benutzung von Birt als Reporting-Tool  
cx.dbase

Logger für CX_DBASE_FILE Klasse.
Gibt unter INFO Meldungen über das Vorhandensein von MNEMO-Dateien aus.

Gibt Warnungen und Fehler bei ungültigem Format oder Fehlern aus.

 
cx.dbutil Fehlermeldungen bei Überprüfung der Datenbank  
cx.dict

Logger für das Parsen des Dictionary-Segments der .ini-Datei.
Gibt unter DEBUG aus, welche Slots durch welcher Überschrieben oder Versteckt werden.

Ab Dll-Version 205351
cx.file

Logger für CX_ASCII_FILE Klasse. Gibt Fehlermeldungen bei zu kleinem Puffer aus.

 
cx.formula Logger für CX_FORMULA Klasse. Gibt Warnungen bei ungültigen Formeln aus.

Unter DEBUG wird vor dem Binden der Variablen der Plugspace ausgegeben und für jede Variable, an welchen Wert sie gebunden wurde.



Ab Dll-Version 217199
cx.gc

Garbage-Collection

Unter DEBUG wird für jedem Lauf der Garbage-Collection geloggt, wie viele Objekte geschützt sind und wie viele Objekte freigegeben wurden.

Unter INFO werden nur die Garbage-Läufe beim Beenden von ClassiX geloggt.

siehe auch CX_GARBAGE_LOGGING_THRESHOLD
cx.gc.time
229962
 
Unter DEBUG wird für jeden Garbage-Collection-Lauf geloggt, wie viel Zeit dieser in Anspruch genommen hat und wie viel Zeit in den einzelnen Phasen verbracht wurde.  
cx.instantview.parser

Meldungen des InstantView®-Parsers 

Unter TRACE gibt dieser Logger die Zustandsübergänge des Zustandsautomaten aus, der die Sprache definiert.

Unter DEBUG gibt der Parser jede Datei aus, die geparst wird.

Unter WARN werden Warnungen beim Parsen des Codes ausgegeben, zum Beispiel bei mehrfach definierten Variablen oder bei mehrdeutiger Vererbung.

 
cx.ivservices
cx.ivs
Ab Dll-Version 224641 umbenannt
Loggt ausführlichere Warnungen und Fehlermeldungen, bei Fehlern im Webserver oder Webclient.
Auf DEBUG werden alle eingehenden HTTP-Requests vollständig geloggt.
 
cx.ivservices.websocket
cx.ivs.websocket

Gibt auf INFO Status und Verbindungsinformationen zur MorphIT-Verbindung aus, sowie eventuell auftretende Fehler.

Unter DEBUG werden nur die Nachrichtentypen der eingehenden Nachrichten geloggt.

Unter TRACE werden alle eingehenden und ausgehenden Websocket-Nachrichten vollständig rausgeloggt. (Sehr teuer)

 
cx.ivservices.morphit
cx.ivs.morphit

Unter WARN werden Warnungen zu eingehenden MorphIT-Nachrichten mit ungültigem Format ausgegeben, sowie Problemen beim MorphIT-Export der Oberfläche.

Unter INFO werden Statusinformationen zur MorphIT-Verbindung ausgegeben.

 
cx.ivs.morphit.paths Unter WARN wird geloggt falls Assetpfade nicht in URLs übersetzt werden können, die relativ zum Server sind.

Unter DEBUG wird geloggt, zu welcher relativen URL jeder lokale Assetpfad übersetzt wurde.
 
cx.lic Meldungen des Lizenzmanagers  
cx.locale

Unter DEBUG wird beim Einlesen der Locales jeder geladene Locale-Eintrag ausgegeben.

Unter INFO wird das eingestellte Locale bei der Initialisierung und bei jedem Locale-Wechsel ausgegeben.

 
cx.login Meldungen zum Login (LoginSID) Ab Dll-Version 177535
cx.main Meldung über Programmstart und -ende, laden von DLLs
Unter DEBUG wird ausgegeben, welche DLL an welche Adresse geladen wurde.
 
cx.model Informationen zu allgemeinen Model-Klassen. Wird weiter unterteilt nach spezifischen Model-Klassen.  
cx.model.dict Dictionaries und Indexes loggen unter diesem Eintrag.
Die Methode FixKeyOwnership loggt unter WARN behobene Probleme und unter DEBUG alle Schlüsselobjekte, die gelöscht (und neu angelegt) werden.
 
cx.model.txn Gibt Informationen zu den Funktionen CX_TRANSACTION::Predecessor/Successsor... aus.  
cx.ole

Logging zu den OLE-, COM-, ActiveX-relevanten Klassen.

Unter TRACE werden die einzelnen Schritte beim Mergen ausführlich geloggt. Zudem wird jeder COM-Methodenaufruf geloggt.

Unter INFO werden alle COM-Aufrufe geloggt, die länger als 50ms gedauert haben.

OLE-Widgets loggen unter cx.ui.ole

 
cx.ole.xml Gibt Fehlermeldungen und Warnungen zu den Klassen CX_EXCEL_XML(xlsx) und CX_WORD_XML(docx) aus.  
cx.ole.xml.search Gibt unter DEBUG einige Informationen aus über die durchsuchten Knoten eines XML-Dokuments.  
cx.omgr

Meldungen des Objekt-Managers

Unter INFO werden beim Start wichtige Informationen für die Analyse von Crashdumps ausgegeben.

 
cx.omgr.db

Unter INFO werden die einzelnen Schritte beim Öffnen der Datenbank ausgegeben. Außerdem wird bei jedem Öffnen der Datenbank geloggt, in welchem Modus sie geöffnet wird. 

 
cx.omgr.osversion ObjectStore-Version und eigene ObjectStore-ID  
cx.omgr.set.clustering
223726

Falls die Variable CX_CHECK_CLUSTERED_SET_INSERTS gesetzt ist, dann werden Clustering bedingte Performanceprobleme geloggt.

Unter WARN werden die problematischen Sets und eingefügten Objekte, sowie der aktuelle Befehl geloggt.

Unter DEBUG werden bei größeren Sets immer alle Elemente geprüft, um eine exakte Anzahl an Elementen im vollsten Bucket zu erhalten.

Unter TRACE wird zusätzlich zum aktuellen Befehl der vollständige Callstack geloggt.

 
cx.oops

Loggt im OOPS Fehler und Warnungen beim Ausführen von Tasks.

Unter INFO werden in ClassiX und im OOPS grundlegende Statusinformationen ausgegeben.

Unter DEBUG werden ausführliche Informationen zur Verbindung und Abarbeitung der Tasks ausgegeben.

Damit der OOPS ein Logfile schreibt, muss die Umgebungsvariable CX_OOPS_LOG gesetzt sein.
cx.pool Meldungen von Pool (Speicherverwaltung)
Unter DEBUG werden Meldungen bei Reallocation von Pools ausgegeben.
 
cx.print Meldungen von der Druckumgebung (ggw. lediglich ASCII-Druck)  
cx.process Hier werden Informationen geloggt wenn ClassiX eine andere Anwendung (einen anderen Prozess) startet.  
cx.query Meldungen zum Aktivieren/Deaktivieren von Indexen  
cx.rate

An- und Abmelden von Rate-Tables (einschließlich Overwrite)
Unter DEBUG werden Inkonsistenzen in Tabellen und jede Anpassung der Tabellen geloggt.

Außerdem werden Umrechnungsfehler über diesen Logger ausgegeben.

 
cx.remote Meldungen der Remote-Schnittstellen (z.B. CORBA)  
cx.remote.corba CORBA bezogene Meldungen der Remote-Schnittstelle  
cx.remote.data Meldungen bezgl. über die Remote-Schnittstelle gesendeter und empfangener Daten  
cx.rqdsp Request-Dispatcher-Meldungen (Befehlsausführung)  
cx.rqdsp.asf Address-Space-Full-Fehler  
cx.rqdsp.deadlock Unterkategorie für das Deadlock-Handling  
cx.rqdsp.deadlock.rcb Ausgabe der Resume Control Blocks (siehe auch CX_DEBUG_RCB_QUEUE)  
cx.rqdsp.deprecated

Ausgabe von veralteten Sprachkonstrukten/Sprachfeatures, die in Zukunft nicht mehr unterstützt werden. Die Ausgabe erfolgt im WARN-Level.

Der Logger sollte im Produktivbetrieb bei Kunden deaktiviert werden, indem er in der logging.ini auf OFF gesetzt wird.

Einige Warnungen werden nur im DEBUG-Level ausgegeben, wenn sie potenziell häufig auftreten können und nur langsam behoben werden können.
Um alle deprecation-Warnungen zu sehen, sollte der Logger auf ALL gesetzt werden.

 
cx.rqdsp.recursion
218706
Wenn der Callstack die Grenze von 1000 erreicht, dann werden die letzten 50 Einträge des Call-Stacks unter WARN geloggt. Gleichzeitig wird die Grenze verdoppelt. 
Diese Warnung dient dazu, Prozeduren zu erkennen, die den ClassiX-Prozess durch endlose Rekursion abstürzen lassen.
 
cx.rqdsp.resetModules
227185
Logger für den Befehl ResetModules.
Unter DEBUG werden alle Module geloggt, welche Module warum vor ResetModules geschützt sind. Und am Ende wird geloggt, wie viele Module zurückgesetzt wurden.
Unter TRACE wird der Names jedes Moduls geloggt, welches zurückgesetzt wird.
 
cx.rqdsp.stack Warnung bei Reallokation des IV-Stacks. Ab DLL-Version 179664
cx.rqdsp.time Laufzeiten der InstantView-Makros (siehe auch CX_MACRO_LOGGING_THRESHOLD) Nur einsetzen (=DEBUG), wenn aktiv Zeitmessungen vorgenommen werden. Wirkt sich sehr leistungsmindernd aus
cx.tapi Debugging Informationen zur TAPI (Telephone API) Schnittstelle  
cx.test Test-Meldungen  
cx.threading Informationen zum Threadingverhalten von ClassiX  
cx.threading.timetrigger CX_TIMED_TRIGGER schreibt Informationen zu seinen Events.
Unter DEBUG wird detailliert geloggt, wann ein Trigger erstellt, aktiviert, deaktiviert, gelöscht wird und wann welche Message ausgelöst wird.
 
cx.threading.critsec Meldungen, wenn CriticalSections benutzt werden  
cx.txn

Transaction-Manager (Monitor für Datenbank-Transaktionen) (siehe auch CX_TXN_LOGGING_THRESHOLD)

Unter DEBUG werden alle Transaktionsschritte geloggt.
Unter TRACE wird zu jedem Transaktionsschritt die Codestelle geloggt (falls bekannt).
Unter INFO  werden abgeschlossene Transaktionen, der Wechsel des Datenbank-Modus (OpenDB) und der Wechsel des Locking-Modus (SetDefaultLockMode) ausgegeben.

 
cx.txn.retry
224453

Unter DEBUG wird jeder abgefangene Deadlock/Lock-Timeout innerhalb von RetryTXN geloggt.

Unter WARN wird eine Warnung ausgegeben, falls ein AbortTXN innerhalb RetryTXN verwendet wird und kein cancel folgt.

 
cx.stringstorage Schreibt eine Warnung, falls die Kundenspezifische Strings-Datei nicht geschrieben werden kann.  
cx.ui Meldungen betreffs der Oberfläche. Wird weiter unterteilt nach Widgettypen  
cx.ui.group ERROR = Fehlermeldung, falls das Gruppenwidget nicht gezeichnet werden kann.  
cx.ui.listview DEBUG = Zusätzliche Informationen während der Zugriffspfadauswertung
ERROR = Fehler während der Eventbehandlung
 
cx.ui.oboxedit DEBUG = Loggt die Events OBOX_UP/OBOX_DOWN  
cx.ui.ole

DEBUG = Loggt jede erzeugte MLOleBox
WARN = Loggt Fehler beim aktivieren der OleBox

 
cx.ui.olecontrol WARN = Unterschiedliche Warnungen bei Fehlern im Control  
cx.ui.progress

TRACE = Wenn ein Progress-Fenster mit TIME_REMAINING geschlossen wird, dann werden die für die Zeitabschätzung verwendeten Zeitpunkte geloggt.
INFO = Zustand des Progress-Fensters, falls dies durch eine Exception geschlossen wurde.
WARN/ERROR = Fehler, die beim Erstellen des nativen Progress-Fensters auftreten.

 
cx.ui.tray Meldungen des Trays  
cx.ui.treeview ERROR = Fehler in der Selektionslogik  

Log-Level-Einstellungen eines Loggers gelten immer auch für den untergeordneten Logger (es sei denn, für diesen untergeordneten wird der Level wieder umdefiniert):

log4cplus.logger.cx=INFO                    # Für alle ClassiX®-Logger: INFO-Level
log4cplus.logger.cx.instantview=WARN        # InstantView®-Meldungen: Nur Warnungen und Fehler
log4cplus.logger.cx.rqdsp=ERROR             # Request-Dispatcher: Nur Fehler, ...
log4cplus.logger.cx.rqdsp.deadlock=WARN     # ... aber bei Deadlock-Meldungen auch Warnungen

Medien

Jede Logging-Zeile kann in mehrere Medien ausgegeben werden. Z.Zt. werden folgende Medien unterstützt:

  • Bildschirm (ConsoleAppender)
  • Datei (FileAppender, RollingFileAppender, DailyRollingFileAppender)
  • System-Log (SyslogAppender, NTEventLogAppender)
  • Netzwerk (SocketAppender)

ClassiX® legt von sich aus die Umgebungsvariable CX_LOGFILENAME an, die einen Standard-Dateinamen inkl. Pfad enthält. Der Pfad entspricht dem System-Verzeichnis von ClassiX®, der Dateiname beginnt mit CX_, gefolgt vom Rechnernamen, Benutzernamen und Prozess-ID, Endung ist .log.
Falls die Umgebungsvariable CX_LOGFILENAME bereits gesetzt ist, wird sie für den laufenden ClassiX-Prozess überschrieben.
Um den Dateinamen der Log Datei manuell zu vergeben muss in der logging.ini der Eintrag entsprechend angepasst werden.

log4cplus.appender.FILE_LOGGER.File=${MY_FILE_NAME}.log       

 

Davon ist allerdings dringend abzuraten, da dann alle Events in nur eine Datei geschrieben werden, was eine Zuordnung zu einem Benutzer erschwert. Allerdings kann an dieser Stelle auf jede beliebige Umgebungsvariable zugegriffen werden, z.B. ${COMPUTERNAME} oder ${USERNAME}.

Der Name der Log-Datei kann alternativ auch über die Umgebungsvariable CX_FORCED_LOGFILENAME geändert werden. CX_LOGFILENAME wird von ClassiX dann auf den Wert von CX_FORCED_LOGFILENAME gesetzt, wenn diese Variable definiert ist.

 

Layout

Logging-Zeilen können individuell gestaltet werden (s. extlnk.giflog4cpp-Dokumentation für Details):

Zeichen (mit Prozent anzugeben) Bedeutung
D, d Zeitstempel (D = lokale Zeit, d = UTC)
  Y, y Jahr (4- bzw. 2-stellig)
  m Monat
  d Tag
  H Stunde
  M Minute
  S Sekunde
  q Millisekunde
p Level
c Kategorie
m Text
n Zeilenumbruch

Level

Es gibt sechs verschiedene Level-Stufen:

Level Beschreibung
TRACE Feinste Stufe, z.T. werden einzelne Funktionsaufrufe geloggt
DEBUG Sehr detaillierte Informationen, die zur technischen Fehlersuche genutzt werden können
INFO Allgemeine Informationen
WARN Warnungen
ERROR Fehler
FATAL Höchste Stufe: Fehler, der zum Programmabbruch führt

Wird in der logging.ini ein bestimmter Level eingestellt, werden alle Meldungen protokolliert, die diesen Level oder einen höheren haben. ALL bedeutet außerdem alle Meldungen, OFF bedeutet keine Meldungen.

Grundsätzlich sollten die Stufen DEBUG, TRACE, ALL in Produktivsystemen mit Bedacht eingesetzt werden, da ihr Einsatz das System stark ausbremsen kann und sie primär zum Nachvollziehen von Problemen geeignet sind.

Sind keine besonderen Voraussetzungen zu beachten, so sind die folgenden Logger-Einstellungen empfehlenswert:

Standard-Logger

#this specifies the default Level: INFO log4cplus.rootLogger=INFO, FILE_LOGGER log4cplus.OrganizeLogsByDate=true log4cplus.appender.FILE_LOGGER=log4cplus::RollingFileAppender log4cplus.appender.FILE_LOGGER.File=${CX_LOGFILENAME}_change.log log4cplus.appender.FILE_LOGGER.ImmediateFlush=true log4cplus.appender.FILE_LOGGER.Append=true log4cplus.appender.FILE_LOGGER.MaxFileSize=5MB log4cplus.appender.FILE_LOGGER.MaxBackupIndex=10 log4cplus.appender.FILE_LOGGER.layout=log4cplus::PatternLayout log4cplus.appender.FILE_LOGGER.layout.ConversionPattern=%D{%Y-%m-%d %H:%M:%S,%q} %5x %5p %c - %m%n #this specifies, which loggers should be appended at which level log4cplus.logger.cx.main=ALL log4cplus.logger.cx.instantview.parser=ERROR log4cplus.logger.cx.omgr.db=WARN log4cplus.logger.cx.ole=WARN log4cplus.logger.rqdsp.deprecated=OFF

 

 Änderungshistorie-Logger

Für die Nachverfolgung von Änderungen, die von Nutzern an Objekten im Zuge von DrainWindow durchgeführt werden, gibt es den cx.change-Logger (bis Dll-Version 198898 noch cx.access), der eine besondere Bedeutung hat. Sobald dieser auf TRACE gesetzt wird, wird ein Mechanismus angemeldet, der jede Objektänderung und jede Transaktion als JSON-Objekt (für einfacheres Parsen) ausgibt. Da hierbei sehr viele Daten geloggt werden, die von den regulären Log-Ausgaben getrennt werden sollten, empfiehlt es sich hierfür einen eigenen Log-Appender zu definieren.

ClassiX definiert hierfür eine eigene Umgebungsvariable CX_CHANGELOGFILENAME (auf Basis von CX_CHANGELOG_DIR), die in der logging.ini verwendet werden kann. Ist CX_CHANGELOG_DIR nicht gesetzt, dann wird nach System\Changelog geschrieben.

Um den Änderungshistorie-Logger zu aktivieren, muss nur folgender Block and die logging.ini hinten angefügt werden:

log4cplus.appender.CHANGE_LOGGER=log4cplus::FileAppender log4cplus.appender.CHANGE_LOGGER.File=${CX_CHANGELOGFILENAME}_change.log log4cplus.appender.CHANGE_LOGGER.ImmediateFlush=true log4cplus.appender.CHANGE_LOGGER.BufferSize=100000 log4cplus.appender.CHANGE_LOGGER.Append=true log4cplus.appender.CHANGE_LOGGER.layout=log4cplus::PatternLayout log4cplus.appender.CHANGE_LOGGER.layout.ConversionPattern=%D{%Y-%m-%d %H:%M:%S,%q} %8x %5p %c - %m%n log4cplus.logger.cx.change=TRACE, CHANGE_LOGGER log4cplus.additivity.cx.change=false

Kurze Erklärung:

Der neu definierte CHANGE_LOGGER-Appender schreibt in einer log-Datei mit dem Suffix _change und formatiert die Ausgabe ähnlich, wie der reguläre Logger. Nachdem der Appender definiert wurde, wird der cx.change-Logger auf das TRACE-Level gesetzt und dem CHANGE_LOGGER-Appender zugewiesen. Die letzte Zeile verhindert, dass ein Event, dass der cx.change-Logger nicht loggt, an den cx-Logger weitergereicht wird.

Whitelist/Blacklist

199065
Um die geloggte Datenmenge weiter einzuschränken kann über SetLoggedClasses, SetNotLoggedClasses eine Whitelist bzw. Blacklist definiert werden. Der Change-Logger loggt nur DrainWindow/Link/ ...-Befehle, die sich auf Objekte beziehen, die von mindestens einer Klasse aus der Whitelist abgeleitet sind und von keiner Klasse aus der Blacklist abgeleitet sind. Geprüft wird immer das Startobjekt der DrainWindow/Link/...-Operation. Die durch die DrainWindow-Operation gedrainten Unterobjekte werden nicht durch die Whitelist/Blacklist gefiltert. Über Whitelist&Blacklist lässt sich so das Logging auf die Klassen von wirklich relevanten Bestandsdaten beschränken. Dadurch wird das System auch weiter beschleunigt.

Wenn nichts gesetzt wurde, dann startet der Change-Logger mit eine Whitelist von CX_CLASS und einer leeren Blacklist, damit alle Änderungen an allen Klassen geloggt werden.

200176
Der Changelogger loggt nun alle Befehle, die den Zustand von persistenten Objekten oder Collections verändern. Um die Operationen, die auf Collections durchgeführt werden einzuschränken, kann der Typ COLL in die Blacklist aufgenommen oder aus der Whitelist entfernt werden (ab jetzt Teil der Default-Whitelist). Die Performance des Loggers lässt sich durch die Wahl einer geeigneten Buffer-Größe (BufferSize in der logging.ini) für den Logger etwas optimieren. Der Changelogger sammelt die Log-Events (solange der Buffer ausreicht) im Speicher bis ein CommitTXN oder AbortTXN kommt.