コンソールからログファイルの更新を監視するJMP 17.2.0 を使用して、コンソール (この場合は Mac OS ターミナル) から JSL ログ ファイルの出力を監視しようとしています。 私が使用しているのは、しっぽを使用したコマンド-fファイルが書き込まれるたびに更新をライブビューするオプション。
$ tail -f log.txt
ただし、新しいテキストがログに書き込まれても、コンソール出力は更新されません。 以下のサンプル JSL は、毎秒 1 行のテキストを出力します。
Open Log();
Clear Log();
For( ii=0, ii<10, ii++,
Write( "hello, world " || Char( ii ) || "\!n" );
Save Log( "log.txt" );
Wait( 1 );
);
スクリプトを開始すると、しっぽ数秒後にコマンドを実行すると、期待どおりの結果が得られます。
$ tail -f log.txt
/*:hello, world 0
hello, world 1
hello, world 2
hello, world 3
ただし、後続の JSL ログ メッセージは、しっぽ指示。 もし私がCtrl+Cアウトしてから再実行するしっぽ, その時点でログファイルに出力されたものはすべてきちんと取得しています。 ただし、出力は再び更新されません。
これが機能しない理由について何か考えはありますか? それとも、期待どおりに機能するログ ファイルを管理する別の方法はあるのでしょうか?
自動化とスクリプト作成マックOSRe: コンソールからログファイルの更新を監視する「powershell バージョンの tail」を使用すると正常に動作するようです(ファイルが最初に存在しないと実行されません)
Get-Content -Path "<logfilepath>" -Wait
https://stackoverflow.com/questions/4426442/unix-tail-equivalent-command-in-windows-powershell
私はログを書きました
Names Default To Here(1);
For(i = 1, i <= 30, i++,
Show(i);
wait(1);
Save Log("$TEMP/jmplog/log.txt");
);
ログ ファイルが想定どおりに更新されていることを手動で確認することもできます。更新されている場合は、tail の何が問題なのかを特定し始めます。 たとえば、ログを保存すると毎回ファイルが再作成され、そのためにライブ追跡がテールドロップされる可能性がありますか?
通常、JMP からログを書き込むときに使用しますテキストファイルを保存() 。 まずヘッダー付きのファイルを作成し (ヘッダーがある場合)、次に mode("append") を使用して新しい行を追加します。 ログの内容全体を取得したい場合にのみ、Save Log() を使用しました (たとえば、コードにエラーがあったときにログを保存するなど)。 ログを取得()時には役に立つこともあります。
編集: -f を -F に変更すると役立つかもしれません。 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 inaccessibleRe: コンソールからログファイルの更新を監視する@スティーブテリーJMP がファイルを置き換えていて、末尾が新しいファイルにラッチできないことが原因である場合 (おそらく)、(おおよその擬似コード) は次のようになります。
xxx = get log text();
clear log(); // so each chunk is appended only once
savetextfile("log.txt", xxx, mode("append") );
あるいは、watch を使用することもできます。
watch tail log.txt
数秒ごとに tail コマンドを再実行します。 簡単ですが、それほど効率的ではありません。
Re: コンソールからログファイルの更新を監視するありがとう@jthi 、 -Fオプションが機能するようになりました。 なぜそのことに気付かなかったのかわかりません男ページ — おそらく私が使ってきたからでしょう-f何十年もの間、固定観念にとらわれずに考えることに熱心ではありませんでした。 フィ、 - リトライこのオプションは Mac には存在しません。 Linux 環境で JMP を使用しているようですね?? それについて詳しく知りたいです。
私が使うテキストファイルを保存() JSL スクリプトを動的に構築するにはかなりの量の反復が必要ですが、ログに送信されるものをキャプチャしないため、ここでは適切ではないと思います。書く()そして見せる() , したがって、二重作業になります。
@Craige_Hales 、ご提案ありがとうございます。 ご参考までに、時計Mac では表示されません (基本インストールの場合は、おそらく手動でインストールできるでしょう)。ただし、Ubuntu では表示されます。 ああ、JMP と Linux も組み合わせているのですか?? ;–)
お二人とも指摘されているように、確かにログを保存()新しい i ノードを与える方法でファイルを書き換えています。尾部 -f負けます。 これは非常に非効率的だと思われます。 定期的なクリアなど、大量のログ バッファー操作が行われる状況でこれがどのように役立つか想像できます。 しかし、ほとんどのアプリケーションでは、事前に割り当てられたファイルへのログのバッファ フラッシュ メカニズムが存在する方がはるかに望ましいと思います。 私のコードは実際に問題がありますログを保存()ランタイム障害が発生した場合に最近のアクティビティをキャプチャするために、コマンドを非常に頻繁に実行します (障害が発生する前に最後に実行していたことを特定できるため)。 それが原因で大量のディスク スラッシングが発生しているようです。 これは私が提案したい新機能でしょうか?
Re: コンソールからログファイルの更新を監視するLinux 上の VirtualBox で実行されている Windows 上で JMP を実行しています。 JSL は Linux と通信できますか?例えば。
あなたが追加したいと思うのは、JMP がログ ウィンドウと並行してディスク ファイル ログを書き込めるようにして、出力を行ごとにフラッシュできるようにすることだと思います。
Re: コンソールからログファイルの更新を監視するWindows上でJMPを実行しています。 グーグルで検索したところしっぽそのマニュアルページを確認しました(ただし、ログを監視するためにcygwinで使用しました)。
Re: コンソールからログファイルの更新を監視する誰かがコメントしたり、賛成票を投じたりしたい場合に備えて、この機能をウィッシュリストに追加しました。
https://community.jmp.com/t5/JMP-Wish-List/Provide-option-to-write-log-file-to-disk-in-Parallel-with-the/idi-p/701103