Überwachen von Protokolldateiaktualisierungen über die KonsoleMit JMP 17.2.0 versuche ich, die Ausgabe einer JSL-Protokolldatei von einer Konsole aus zu überwachen – (in diesem Fall Mac OS Terminal). Ich verwende das Schwanz Befehl mit dem -F Option zur Live-Anzeige der Aktualisierungen, wann immer die Datei geschrieben wird.
$ tail -f log.txt
Die Konsolenausgabe wird jedoch nie aktualisiert, wenn neuer Text in das Protokoll geschrieben wird. Die folgende Beispiel-JSL gibt jede Sekunde eine Textzeile aus:
Open Log();
Clear Log();
For( ii=0, ii<10, ii++,
Write( "hello, world " || Char( ii ) || "\!n" );
Save Log( "log.txt" );
Wait( 1 );
);
Wenn ich das Skript starte, führe ich das aus Schwanz Befehl ein paar Sekunden später erhalte ich das erwartete Ergebnis:
$ tail -f log.txt
/*:hello, world 0
hello, world 1
hello, world 2
hello, world 3
Nachfolgende JSL-Protokollnachrichten werden jedoch nicht erfasst Schwanz Befehl. Wenn ich Strg-C aus, dann erneut ausführen Schwanz , erhalte ich zu diesem Zeitpunkt ordnungsgemäß alles, was in der Protokolldatei ausgegeben wird. Aber die Ausgabe wird nie wieder aktualisiert.
Irgendwelche Gedanken, warum das nicht funktioniert? Oder gibt es vielleicht eine andere Möglichkeit, eine Protokolldatei zu verwalten, bei der dies wie erwartet funktionieren würde?
Automatisierung und SkripterstellungMac OSBetreff: Überwachen von Protokolldateiaktualisierungen über die KonsoleDie Verwendung der „Powershell-Version von Tail“ scheint gut zu funktionieren (dies wird nur ausgeführt, wenn die Datei zuerst vorhanden ist).
Get-Content -Path "<logfilepath>" -Wait
https://stackoverflow.com/questions/4426442/unix-tail-equivalent-command-in-windows-powershell
Ich habe das Protokoll mit geschrieben
Names Default To Here(1);
For(i = 1, i <= 30, i++,
Show(i);
wait(1);
Save Log("$TEMP/jmplog/log.txt");
);
Sie könnten manuell überprüfen, ob die Protokolldatei so aktualisiert wird, wie Sie denken, und wenn das der Fall ist, beginnen Sie herauszufinden, was mit tail nicht stimmt. Könnte das Speichern des Protokolls beispielsweise dazu führen, dass die Datei jedes Mal neu erstellt wird und die Live-Verfolgung dadurch unterbrochen wird?
Wenn ich Protokolle von JMP schreibe, verwende ich normalerweise Textdatei speichern() . Erstellen Sie zunächst die Datei mit Kopfzeilen (falls vorhanden) und fügen Sie dann mit mode("append") neue Zeilen hinzu. Nur wenn ich den gesamten Protokollinhalt erhalten wollte, habe ich Save Log() verwendet (zum Beispiel das Speichern des Protokolls, wenn der Code Fehler hatte). Holen Sie sich Log() kann manchmal auch nützlich sein.
Bearbeiten: Vielleicht könnte es helfen, -f in -F zu ändern? https://man7.org/linux/man-pages/man1/tail.1.html
-f, --follow[={name|descriptor}]
output appended data as the file grows;
-F same as --follow=name --retry
--retry
keep trying to open a file if it is inaccessibleBetreff: Überwachen von Protokolldateiaktualisierungen über die Konsole@SteveTerry Wenn es daran liegt, dass JMP die Datei ersetzt und Tail sich nicht an die neue Datei anbinden kann (scheint wahrscheinlich), dann (Pseudocode, ungefähr) etwa so:
xxx = get log text();
clear log(); // so each chunk is appended only once
savetextfile("log.txt", xxx, mode("append") );
Alternativ könnten Sie watch verwenden, so etwas wie
watch tail log.txt
um den tail-Befehl alle paar Sekunden erneut auszuführen. Einfacher, aber nicht so effizient.
Betreff: Überwachen von Protokolldateiaktualisierungen über die KonsoleDanke @jthi , Die -F Option hat es zum Laufen gebracht. Ich bin mir nicht sicher, warum ich das nicht aufgegriffen habe Mann Seite – wahrscheinlich, weil ich verwendet habe -F jahrzehntelang und hatte keine Lust, über den Tellerrand zu schauen. Zu Ihrer Information, das --wiederholen Option existiert auf dem Mac nicht; Es sieht irgendwie so aus, als würden Sie JMP in einer Linux-Umgebung verwenden? Ich würde gerne mehr darüber erfahren.
ich benutze Textdatei speichern() iterativ ziemlich viel, um JSL-Skripte dynamisch zu erstellen, aber ich glaube nicht, dass das hier angemessen ist, da es keine an das Protokoll gesendeten Dinge erfasst, z. B. Schreiben() Und Zeigen() , es wäre also Doppelarbeit.
@Craige_Hales , danke für deine Vorschläge. Zu Ihrer Information, betrachten wird auf dem Mac nicht angezeigt (zumindest bei Basisinstallationen – vielleicht könnte ich es manuell installieren), obwohl ich es auf Ubuntu sehe. Oh mein Gott, kombinierst du JMP irgendwie auch mit Linux?? ;–)
Wie Sie beide angedeutet haben, scheint es so zu sein Protokoll speichern() schreibt die Datei so um, dass sie einen neuen Inode erhält Schwanz -f verliert. Das scheint sehr ineffizient zu sein. Ich kann mir vorstellen, wie nützlich dies unter bestimmten Umständen sein könnte, wenn viele Protokollpuffer manipuliert werden, beispielsweise beim regelmäßigen Löschen. Aber ich denke, für die meisten Anwendungen wäre es weitaus vorzuziehen, wenn es einen Puffer-Flush-Mechanismus für das Protokoll in einer vorab zugewiesenen Datei gäbe. Mein Code gibt tatsächlich Probleme Protokoll speichern() Befehle sehr häufig aus, um die aktuelle Aktivität im Falle eines Laufzeitfehlers zu erfassen (damit ich erkennen kann, was vor dem Fehler zuletzt ausgeführt wurde). Es hört sich jetzt so an, als würde das zu einer Menge Festplatten-Thrashing führen. Ist dies möglicherweise eine neue Funktion, die ich vorschlagen möchte?
Betreff: Überwachen von Protokolldateiaktualisierungen über die KonsoleIch führe JMP unter Windows in einer VirtualBox unter Linux aus. Kann JSL mit Linux kommunizieren?Zum Beispiel.
Ich denke, der Wunsch, den Sie vielleicht hinzufügen möchten, ist, dass JMP parallel zum Protokollfenster auch ein Festplattendateiprotokoll schreiben kann und möglicherweise die Ausgabe jede Zeile leert.
Betreff: Überwachen von Protokolldateiaktualisierungen über die KonsoleIch verwende JMP unter Windows. Ich habe gerade gegoogelt Schwanz und habe diese Manpage überprüft (ich habe sie allerdings mit Cygwin zum Überwachen von Protokollen verwendet).
Betreff: Überwachen von Protokolldateiaktualisierungen über die KonsoleDiese Funktion wurde zur Wunschliste hinzugefügt, für den Fall, dass jemand einen Kommentar abgeben oder dafür abstimmen möchte.
https://community.jmp.com/t5/JMP-Wish-List/Provide-option-to-write-log-file-to-disk-in-parallel-with-the/idi-p/701103