Laufzeitfehler SystemLog v6.3.9

Guten Abend,

ich bin über ein seltsames Verhalten gestolpert: Ich habe folgende Prozedur geschrieben:

procedure writeDebug(message: String);
// Sends debug messages to mAirlist SystemLog
//
//    Args:
//        message (string): the message
//
  var
    messageType: TLogCategory;
  begin
    if (DEBUG = true) then
      begin
        messageType := lcDebug;
        //Instance.GetLogger.SystemLog(messageType, message);
        Instance.GetLogger.SystemLog(messageType, 'foo', message);
      end;
  end;

Die Prozedur habe ich aus meinem alten Script (für mAirlist 4.x noch) geschrieben - hat sich an der API für SystemLog() irgendetwas geändert seitdem? Ich bekomme nämlich einen Laufzeitfehler:

Error running script: Laufzeitfehler: (105,6) Exception: Type Mismatch

Wer jetzt sagt: “ja, klar, das ‘foo’ ist falsch”, dem zieh’ ich die Hammelbeine lang :stuck_out_tongue: :smiley: Das weiß ich auch, daß das falsch ist - aber wie muß es richtig sein? Eigentlich war ich der Ansicht, daß SystemLog zwei Parameter bekommt, nämlich Typ und Nachricht; so habe ich es auch aus meinem alten Script herauskopiert (die auskommentierte Zeile obendrüber zeigt das noch). Kommentiere ich die wieder rein, kompiliert das Script nicht:

Error running script: [Error]: (104,56): Invalid number of parameters

Anyone care to explain? Wo steh’ ich auf dem Schlauch?

Verwirrte Grüße,
McCavity

P.S.: eigentlich wollte ich damit ja noch nicht an die Öffentlichkeit, aber wer mein Git Repo kennt kann eh schon darauf zugreifen - hier ist der Link zum fraglichen Script[1]. Commit 8538938[2] enthält die Änderungen, die zu dieser Version geführt haben (für den Fall, daß ich schon weitere Änderungen gepusht haben sollte, wenn man auf das Script zugreift ;-))

[1] vm110n-mairlist/vm110_comms.mls at main · McCavity/vm110n-mairlist · GitHub
[2] Completed debugging for compile · McCavity/vm110n-mairlist@8538938 · GitHub

Gerade habe ich 32318f3 gepusht - und die writeDebug Prozedur (hoffentlich nur temporär) deaktiviert. Egal, was ich versucht habe (Zeile 104 bis 107), nichts davon funktioniert - entweder “Invalid number of parameters” oder, im Fall von Zeile 105, “Type Mismatch”.

Erstaunlicherweise wirft die “writeError” Prozedur keine solchen Fehler - sollte es daran liegen, daß ich den messageType erst in der IF clause zuweise…? Laßt mich das nochmal testen…

Edit: nein, daran lag’s nicht - in writeError() habe ich auch einen dritten Parameter ‘bar’ eingefügt, was die Compilation ermöglicht - aber ich denke, wenn ich im Script irgendwo in einen Error liefe, den ich damit loggen wollte, würde ich auch den “Type Mismatch” Laufzeitfehler bekommen.

Interessant: als ich noch ein bisschen rumprobiert habe, habe ich mal den messageType in der writeDebug() Prozedur auf “lcError” geändert. Dabei hat mir der Editor nach “lcE” schon “lcError” vorgeschlagen. Nach “lcD” gab es hingegen keine Vorschläge zur Autocompletion.

Keine Ahnung. Ohne die Loggingprozeduren funktioniert jetzt zwar mein Test, aber ohne Logging würde ich eigentlich ungern weitertesten :-/ Hat nicht jemand eine zündende Idee für mich…?

Ich hoffe das ist jetzt nicht zu OT - aber ein kleines bisschen stolz bin ich auf meinen ersten erfolgreichen Test ja schon… :blush:

Youtube: Kurzes Video vom ersten Test

Die aktuelle Definition sieht so aus:

procedure SystemLog(iCategory: TLogCategory; iMessage: string; iLocalOnly: boolean = false);

Der dritte Parameter muss also ein boolean (true oder false) sein und gibt an, ob der Eintrag lediglich lokal (Systemprotokollfenster und integrierte Logdatei, nicht aber Logging-Interface “Systemprotokoll”) verarbeitet werden soll.

Leider kann Pascal Script mit dem default-Wert false nicht umgehen, so dass man ihn immer explizit angeben muss:

Instance.GetLogger.SystemLog(lcDebug, 'hallo', false);

Sorry, mir war nicht bewusst, dass ihr diese Funktion aus den Scripts heraus benutzt, sonst hätte ich das dokumentiert.

1 Like

Ah! Das erklärt einiges, vielen Dank für die Info! Ja, die Vorlage dafür hatte ich 2014 geschrieben und ich bin wahrscheinlich einer der wenigen, die bei der Art der Meldung differenzieren wollen - insofern kein Wunder, daß das bis jetzt unbemerkt blieb.

Dann baue ich das mal so ein und dann sollte hoffentlich alles gut sein! :slight_smile:

Danke nochmal!