Nach Aktivierung dieser Logging-Art kann man gezielt aus einem AddOn heraus hier Einträge protokollieren. Sehr hilfreich bei der AddOn-Programmierung und späterer Fehlersuche. Bei vielen AddOns kann man die Protokollierung in der AddOn-Konfig einschalten (dafür muss aber zuerst LogAddOn.txt aktiviert sein, siehe Was ist Logging).
Programmiert man dann im AddOn den Befehl Cockpit.WriteLog := 'Hallo';,
so schreibt es dann in das LogAddOn.txt-File ein Hallo mit Zeitstempel wie folgt:
[29.09.2020 17:59:44 265] Hallo
Ab Version 3.3.1 build 484 ist der Zeitstempel um die Belegung des Arbeitsspeichers durch die gesamte Anwendung Cockpit-XP erweitert…
[13.04.2023 11:17:46 315] [107808 KB] Hallo …
Die Einträge werden immer angehängt, sprich die Datei wächst und wächst. Aus dem Grund sollte man LogAddOn.txt nach Gebrauch\Fehlersuche auch wieder deaktivieren, ansonsten kann es u.U. zu Perfomance-Problemen kommen.
Das File liegt bei einer Standard-Installation immer im Cockpit-XP Datenverzeichnis
Der reale Speicherort kann je nach Version und Anwender unterschiedlich sein:
Die Inhalte der Datei LogAddOn.txt müssen durch den Entwickler im AddOn-Code generiert werden. Dazu steht der Befehl Cockpit.WriteLog zur Verfügung. Ein Beispiel und die Textausgabe in der LogAddOn.txt sind nachfolgend zu finden.
{ Pascal Script Engine } { Event: KeyDown } { Parameter: Cockpit.Parameter=<TastenCode> } var sEventName : String; sNameAddOn : String; iPosBackslash : Integer; iTaste : Integer; // Hauptprogramm ab hier --> begin // EventID liefert den Namen des Events case Cockpit.EventID of 0 : sEventName := 'StartZiel '; 1 : sEventName := 'ChangeRealTimeStatus'; 2 : sEventName := 'StartZielSichTime '; 3 : sEventName := 'TankenEinfahrt '; 4 : sEventName := 'TankenAusfahrt '; 5 : sEventName := 'TopSpeedStart '; 6 : sEventName := 'TopSpeedStopp '; 7 : sEventName := 'Rundenrekord '; 8 : sEventName := 'Slotrekord '; 9 : sEventName := 'Bahnrekord '; 10 : sEventName := 'SchnellsteRunde '; 11 : sEventName := 'DigInputEvent '; 12 : sEventName := 'StartRealTime '; 13 : sEventName := 'ChangeScreen '; 14 : sEventName := 'KeyDown '; 15 : sEventName := 'Bestrafung '; 16 : sEventName := 'CUSensorGruppe '; 17 : sEventName := 'BeforeClose '; 18 : sEventName := 'Startampel '; else sEventName := 'Unbekannt '; end; // END case - EventID // Wert der Taste speichern iTaste := Cockpit.Parameter; // Namen des Addons ermitteln sNameAddOn := cpGetPackagePath; repeat iPosBackslash := Pos('\', sNameAddOn); Delete(sNameAddOn, 1, iPosBackslash); until iPosBackslash = 0; // Protokollierung für Fehlersuche if cpGetIntegerVar('WriteLogFile') = 0 then begin Cockpit.WriteLog:=sNameAddOn+' | '+sEventName+' | Pfad zum AddOn : '+cpGetPackagePath; Cockpit.WriteLog:=sNameAddOn+' | '+sEventName+' | Name AddOn : '+sNameAddOn; Cockpit.WriteLog:=sNameAddOn+' | '+sEventName+' | Wert Taste : '+IntToStr(iTaste); Cockpit.WriteLog:=sNameAddOn+' | '+sEventName+' | '; end; end.
Der Code protokolliert in einer Textdatei den Pfad zum AddOn, extrahiert den Namen des AddOns auf dem Pfad, zeigt den Wert der gedrückten Taste im KeyDown-Event und fügt am Ende eine Leerzeile ein. Damit dieser Code universell einsetzbar wird, holt es sich per Cockpit.EventID das Event.
Die Textzeile ist entsprechend zusammengesetzt aus AddOn-Name, Event-Name, Bezeichnung und Wert der Variablen. So wird es auch in komplexen Logs möglich, auf einen Blick zu sehen, aus welchem AddOn und Event die Zeile stammt, die hier im Log eingetragen ist.
Der Inhalt der so erzeugten Log-Datei sieht folgendermaßen aus:
[13.04.2023 11:17:46 315] [107808 KB] SLX - Tesst Code KeyDown | KeyDown | Pfad zum AddOn : V:\cp-datenverzeichnis\Cockpit-V2\AddOn\SLX - Snippets\SLX - Tesst Code KeyDown [13.04.2023 11:17:46 315] [107808 KB] SLX - Tesst Code KeyDown | KeyDown | Name AddOn : SLX - Tesst Code KeyDown [13.04.2023 11:17:46 315] [107808 KB] SLX - Tesst Code KeyDown | KeyDown | Wert der gedrückten Taste : 222 [13.04.2023 11:17:46 315] [107808 KB] SLX - Tesst Code KeyDown | KeyDown |