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
log4j-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:
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:
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 hochgestuft.
| Logger | Bedeutung |
|---|---|
| cx.app | Allgemeine Meldungen der Applikation, z.B. Fehlermeldungen oder Meldungen via CX_SYSTEM_OBJECT::Log |
| cx.arena | Meldungen der Arena (Speicherverwaltung) |
| cx.as | Meldungen der Address-Space Verwaltung (Marker) |
| cx.basic | Meldungen der Basisklassen bzw. der Basis-Infrastruktur |
| cx.basic.fcond | |
| cx.basic.formula | |
| cx.basic.numeric | |
| cx.basic.string | |
| cx.basic.unit | |
| cx.birt | Informationen zur Benutzung von Birt als Reporting-Tool |
| cx.gc | Garbage-Collection-Läufe (siehe auch CX_GARBAGE_LOGGING_THRESHOLD) |
| cx.instantview | InstantView®-Meldungen, z.B. doppelt definierte Variablen oder Messages |
| cx.instantview.parser | Meldungen des InstantView®-Parsers |
| cx.lic | Meldungen des Lizenzmanagers |
| cx.listview | Meldungen der ListView |
| cx.locale | Meldungen zu den Locales |
| cx.main | Meldung über Programmstart und -ende, laden von DLLs |
| cx.model | Informationen zu allgemeinen Model-Klassen. Wird weiter unterteilt nach spezifischen Model-Klassen. |
| cx.model.dict | Dictionaries und Indexes loggen unter diesem Eintrag |
| cx.model.monitor | |
| cx.objectbrowser | Meldungen des Objectbrowsers |
| cx.ole | Logging zu den OLE-, COM-, ActiveX-relevanten Klassen. OLE-Widgets loggen unter cx.ui.ole |
| cx.omgr | Meldungen des Objekt-Managers |
| cx.omgr.db | Öffnen der Datenbanken |
| cx.omgr.osversion | ObjectStore-Version und eigene ObjectStore-ID |
| cx.perf | Performance logging |
| cx.perf.iv | Performance informationen bezgl. Instantview-Statements. Im DEBUG-Level wird zu jedem Statement ein Eintrag erzeugt, das Logfile wächst dann also sehr schnell. Im INFO-Level werden die Zeiten gesammelt und je nach Einstellung von CX_PERF_LOGGING_THRESHOLD_PAGE und CX_PERF_LOGGING_THRESHOLD_TIME geloggt. |
| cx.perf.db | Performance informationen bezgl. Datenbank (ggw. nicht verwendet) |
| cx.pool | Meldungen von Pool (Speicherverwaltung) |
| 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 | Query-relevante Meldungen |
| 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.time | Laufzeiten der InstantView-Makros (siehe auch CX_MACRO_LOGGING_THRESHOLD) |
| 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 |
| cx.threading.critsec | Meldungen, wenn CriticalSections benutzt werden |
| cx.txn | Transaction-Manager (Monitor für Datenbank-Transaktionen) (siehe auch CX_TXN_LOGGING_THRESHOLD) |
| cx.ui | Meldungen betreffs der Oberfläche. Wird weiter unterteilt nach Widgettypen |
| cx.ui.group | |
| cx.ui.listview | |
| cx.ui.oboxedit | |
| cx.ui.ole | |
| cx.ui.olecontrol | |
| cx.ui.notebook | |
| cx.ui.tray | Meldungen des Trays |
| cx.ui.treeview |
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):
Jede Logging-Zeile kann in mehrere Medien ausgegeben werden. Z.Zt. werden folgende Medien unterstützt:
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 Prozeß-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.
Logging-Zeilen können individuell gestaltet werden (s.
log4j-Dokumentation für Details):
| Zeichen | 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 |
Es gibt fünf verschiedene Level-Stufen:
| Level | Beschreibung |
|---|---|
| TRACE | Feinste Stufe, z.T. werden einzelne Funktionsaufrufe geloggt |
| DEBUG | Sehr detaillierte Informationen, die zur technischen Fehlersucht 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.