從控制台監控日誌檔案更新使用 JMP 17.2.0,我嘗試從控制台(在本例中為 Mac OS 終端機)監控 JSL 日誌檔案的輸出。 我正在使用尾巴命令與-F每當寫入檔案時即時查看更新的選項。
$ tail -f log.txt
但是,當新文字寫入日誌時,控制台輸出永遠不會更新。 下面的範例 JSL 每秒輸出一行文字:
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退出,然後重新運行尾巴,我當時正確地將所有內容輸出到日誌檔案。 但輸出再也不會更新。
關於為什麼這行不通的任何想法? 或者是否有另一種方法來管理日誌文件,使其按預期工作?
自動化和腳本編寫蘋果系統回覆:從控制台監控日誌檔案更新使用“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 inaccessible回覆:從控制台監控日誌檔案更新@史蒂夫特里如果是因為 JMP 正在替換檔案並且 tail 無法鎖定新檔案(似乎很可能),那麼(大約是偽代碼)如下所示:
xxx = get log text();
clear log(); // so each chunk is appended only once
savetextfile("log.txt", xxx, mode("append") );
或者,您可以使用手錶,例如
watch tail log.txt
每隔幾秒鐘重新執行 tail 指令。 更容易,但效率不那麼高。
回覆:從控制台監控日誌檔案更新謝謝@jthi , 這-F選項是讓它發揮作用的原因。 不知道為什麼我沒有在男人頁面 - 可能是因為我一直在使用-F幾十年來,並不熱衷於跳脫框架思考。 僅供參考, - 重試Mac 上不存在該選項;看起來你是在 Linux 環境中使用 JMP 嗎? 我想了解更多相關資訊。
我用儲存文字檔()動態建立 JSL 腳本需要迭代相當多的時間,但我認為這裡不合適,因為它不會捕獲發送到日誌的內容,例如,寫()和展示() ,所以這將是雙重工作。
@Craige_Hales ,感謝您的建議。 供參考,手錶沒有出現在 Mac 上(無論如何對於基本安裝 - 也許我可以手動安裝它),儘管我在 Ubuntu 上看到了。 天哪,你是否也以某種方式將 JMP 與 Linux 結合? ;–)
正如你們倆所指出的,看起來確實如此保存日誌()正在以一種給它一個新的 inode 的方式重寫文件,這尾部-f輸了。 這看起來效率很低。 我可以想像這在某些進行大量日誌緩衝區操作(例如定期清除)的情況下可能會很有用。 但我認為,對於大多數應用程式來說,如果存在將日誌緩衝區刷新到預先分配的檔案的機制,那就更好了。 我的程式碼實際上有問題保存日誌()非常頻繁地執行命令,以便在發生運行時故障時捕獲最近的活動(這樣我就可以識別故障之前它最後一次執行的操作)。 現在聽起來這會造成大量的磁碟抖動。 這可能是我想建議的新功能嗎?
回覆:從控制台監控日誌檔案更新我在 Linux 下的 VirtualBox 中執行的 Windows 上執行 JMP。 JSL 可以與 Linux 對話嗎?例如。
我認為您可能想要添加的願望是 JMP 也能夠與日誌視窗並行寫入磁碟檔案日誌,並且可能會刷新每一行的輸出。
回覆:從控制台監控日誌檔案更新我在 Windows 上運行 JMP。 我剛剛用谷歌搜尋尾巴並檢查了該手冊頁(不過我已經將它與 cygwin 一起使用來監視日誌)。
回覆:從控制台監控日誌檔案更新將此功能添加到願望清單中,以防有人想要評論或投票。
https://community.jmp.com/t5/JMP-Wish-List/Provide-option-to-write-log-file-to-disk-in-parallel-with-the/idi-p/701103