使用java,我想監視日誌文件,並且如果日誌文件中的任何行與給定的輸入字符串匹配,它應該打印日誌消息。同樣,當啓動這個應用程序時,它應該從日誌文件的末尾讀取,即它應該只讀取更新的日誌消息,如tail -f
而不是從日誌文件的開頭。除了使用Apache常見的Tailer API之外,我如何在java中實現這個功能?在java中,是否有任何最簡單的方法來執行tail -f功能,但common.apache.io.Tailer API
0
A
回答
0
創建一個RandomAccessFile來打開該文件,尋找到最後並開始使用readLine()。你得到的第一行可能會在左邊裁剪。如果你想得到最後一行,你可以在閱讀文章之前回顧一下。然後使用Pattern或任何你想測試每一行,所以當它匹配'輸入字符串',你可以打印它。
當你到達EndOfFile的readLine()將拋出EOFException類這樣讀線之前,你可能要考慮當前位置的說明(getFilePointer()),所以你可以再次尋求那裏,然後重試您注意到文件的修改日期之後或文件大小改變。我認爲沒有必要關閉並重新打開文件。要獲取修改日期,您需要一個File。文件長度可以從RAF本身或文件中獲得。
我不確定在EOFException文件結束的情況下,在一行的中間(在結尾沒有\ n)的情況下需要回頭查找。
如果您想要異步行爲,但您不能像使用同步和線程便宜一樣簡單,您可以使用@kdgregory建議的FileChannel。
相關問題
- 1. 是否有更簡單的方法來執行if else語句?
- 2. 是否有任何Java庫來解析簡單的語法?
- 3. 在Java中執行簡單的異步任務的最佳方法?
- 4. 是否有任何簡單的方法來檢查在Bash中是/否選項的所有可能性?
- 5. 是否有任何方法在java中執行與StreamReader()相同的事情?
- 6. 是否有任何方法使用列表中的數字來執行操作?
- 7. 在Ruby中執行XMLHttpRequest的最簡單方法是什麼?
- 8. 是否有任何可行的方法來連接java與c + +
- 9. 簡單的SQL來檢查父項是否有任何子行
- 10. 是否有任何新的api來創建功能,如iBook
- 11. 最簡單的方法來定時輸出功能
- 12. Java「tail -f」包裝
- 13. 在java中並行化任務的最簡單方法是什麼?
- 14. 檢查AzureTable是否有任何數據的最簡單有效的方法?
- 15. 在觸發器中執行否定的最簡單方法是什麼?
- 16. 是否有更簡單的方法來進行布爾轉換?
- 17. 是否有類(功能,方法等或任何功能)像下面的功能?
- 18. 是否有任何簡單易懂的方式來以功能的方式解析表Python?
- 19. 在Perl中是否有等效的`tail -f`?
- 20. 更簡單的方法來保持git功能分支最新
- 21. 最簡單的方法來檢查OL3功能相等
- 22. 是否有任何算法來判斷運行時的Java方法重寫?
- 23. 是否有libclang中的任何api來簡化BinaryOperator
- 24. 是否有任何簡單的方法來排序c#switch case語句?
- 25. 在Java中拉取JSON URL最簡單的方法是什麼?
- 26. Android Java - 是否有一種簡單的方法來將幾行視圖充氣?
- 27. 是否有另一種方法在java中執行repaint()?
- 28. Android HttpURLConnection-最簡單的方法來信任所有主機?
- 29. 是否有任何方法來檢查行中是否存在多列的值
- 30. 在PHP 5.x中是否有任何簡單的方法來回顯RecordSet上的任何類型的數據?
如果你完全解釋爲什麼*你不想使用Apache Tailer,你將得到更好的迴應。如果這是因爲需要設置的工作,那麼您可能運氣不好。簡單地模擬'tail -f'功能很容易:你在StdIn上阻塞。但是您可能希望在程序中同時發生其他操作,這意味着使用一個線程並可能是一個'FileChannel'。所有這些至少與使用Tailer一樣複雜,並且沒有大型(ish)用戶社區的好處。 – kdgregory
請參考以下鏈接。 http://www.apacheserver.net/q154517/java-apache-common-tailer-api-reading-old-log-messages – ssbecse