Probleme mit der logdatei (FileWrite)

  • ich habe bislang folgende variante verwendet:

    [autoit]


    $debuglog = 1 ;hier hab ich es ein und ausgestellt

    [/autoit][autoit][/autoit][autoit]

    ;und dann überall soetwas im script:
    if $debuglog = 1 then FileWrite($ToolTitle&"-debug.log","_get_PID_from_PW"& @LF)

    [/autoit]

    Jetzt habe ich hierbei 2 feststellungen gemacht, die ich nun verbessern möchte:
    1. die if-abfrage findet nun ja auch statt, wenn das debuglog ausgeschaltet ist. in zeitkritischen schleifen, kann das schon etwas performance kosten, deshalb würde ich am liebsten die ganzen zeile mit "if $debuglog = 1 then...." aus dem kompilierten script haben. bei C++ ging das über #define und den präprozessor. welche möglichkeiten habe ich dazu in autoit?

    2. ich habe festgestellt, das mein script noch bugs hat und das es bei meiner methode das debuglog zu erstellen vorkommt, dass (warum auch immer) die ganze logdatei gelöscht wird (ich habe keine ahnung warum und wann das genau passiert, aber ich habe im gesamten script keine filedelete funktion für das debuglog und es ist einfach weg, das programm beendet sich sang und klanglos .... ich finde den fehler einfach nicht, da er auch nur nach einigen tagen laufzeit des programmes auftritt und keine fehlermeldung geworfen wird.) - jemand eine idee ?

  • Also zu #1:
    Schreib dir noch ein Script was dir die Arbeit macht.
    Kann man fast in 10 Zeilen Code hinkriegen.

    Zu #2:
    Keine Ahnung ohne das vollständige Script.

  • da du vermutlich öfters was in die Logdatei schreibst, empfehle ich dir die Befehle

    [autoit]

    $hFile = FileOpen($ToolTitle&"-debug.log",1)
    FileClose($hFile)

    [/autoit]


    zu nutzen (einfach mal in die Hilfe gucken)

    Zu #2 : Komisches Verhalten, aber ohne Skript wohl schlecht nachvollziehbar

  • Das Phänomen, dass es bei der Nutzung von filewrite in sehr seltenen Fällen vorkommt, dass die Datei verschwindet hatte ich auch schon. Daher erstelle ich vor dem filewrite eine Sicherungskopie und vergleiche anschließend die Dateigrößen. Bei Bedarf wird das Backup dann wiederhergestellt oder eben gelöscht. Aus Performancesicht ist es aber eine Katastrophe permanent in die Logdatei zu schreiben, gerade in einer Schleife würde ich das nicht tun.

    Eventuell wäre ein externer Debugger sinnvoller und ressourcensparender. Dieser könnte dann alle Nachrichten die er vom zu überwachenden Script erhält sammeln und dann in Intervallen von einigen Minuten in eine Datei schreiben. Was die if Abfrage angeht würde ich mir keinen Kopf machen, dieser simple Vergleich dürfte wirklich nicht viel Zeit kosten. Aber auch hier könntest du wie schon erwähnt ein sehr einfaches Script schreiben, das dir diese Debugzeilen aus bzw. einkommentiert bevor du das ganze dann kompilierst.