回答
雖然它很晚但想到編寫我用來實現此功能的方法。
比方說,我們開始一項工作,每5分鐘後定期讀取一個文件。
- 在第一次運行時,將整個文件讀
- 商店的線數和文件
的最後修改時間進行後續作業運行就變得有意思了。
- 在下次作業運行期間,檢查文件是否被修改(使用文件上次修改時間和在早期作業運行期間存儲的文件)。如果該文件未被修改,則不執行任何操作。
- 如果文件被修改,我們只需要閱讀新的行。我們從早期的工作中獲得行數,所以用它來確定要跳過的行數。
到目前爲止很好,如果文件翻轉過來呢?
- 假設我們有一個文件時,文件被輾過命名模式...
- 通過獲取所有文件匹配模式,並根據最後修改時間的文件以升序進行排序
- 迭代文件,並從最後一次修改時間大於上次作業運行時間的那一個開始。使用存儲線數巧妙地跳過已讀線
- 復位線數,當你用一個新的文件啓動之後
這就是它!
對於一些奇怪的場景,您可能需要在幾個地方放置IF條件。其中一種情況是,當您迭代文件時,如果文件的上次修改時間與存儲的文件完全相同,則只需重置行數 - 以便從下一個/新文件的第一行開始。對於後續作業
示例代碼運行:
的(文件文件:文件){
如果(file.lastModified()> storedLastModifiedTime){
//你要處理的文件,照顧線計
}否則如果(file.lastModified()== storedLastModifiedTime){
//重置存儲行計數
}
}
任何建議/意見/問題? 「
你可以看看Chainsaw
+1:你的第一段不太相關;這個問題是關於閱讀日誌,而不是寫作。然而,電鋸看起來完全適合。 – 2010-11-22 12:05:34
我猜Chainsaw只適用於log4j,那麼其他日誌API呢? – 2010-11-23 02:44:48
不知道任何其他人對不起(至少不是免費的開源軟件) – 2010-11-23 09:45:12
我試圖接近漂亮很多相同的問題。它看起來並不像看起來那麼瑣碎。您必須忽略EOF/EOS的概念,並且必須跟蹤日誌文件中的位置。
我認爲最好的方法是有一個單獨的線程來讀取日誌文件。我用BufferedReader
做了一個很有前途的測試。該線程讀取文件末尾的所有數據(其中readLine()
返回null
),並進入睡眠N秒(在我的情況下爲5秒)。然後醒來後再次嘗試閱讀一行。如果它返回String
,則繼續處理。如果它得到null
它會再次入睡。它在每次成功讀取時增加行計數器,並在停止/啓動時寫入/讀取它,因此它可以找到日誌文件中的最後位置並從該點開始。
這種方法的唯一問題是N秒等待。有一種方法可以告訴Java「在readLine()
上阻塞,而不管EOF/EOS」。隨着第二次等待,您可能正在睡覺,而數據已經可用。然而,睡眠似乎是必要的,除非你想吃掉所有的CPU能力。
我以爲提問者是在現有代碼/ lib之後進行此操作,而不是從頭開始編寫代碼。 – 2010-11-22 12:06:32
醒來後,如果嘗試讀取另一行,您還應該檢查日誌是否翻轉。 – hidralisk 2010-11-22 16:54:21
處理翻轉日誌是具有挑戰性的部分。我們如何確定線程閒置時生成的日誌文件的數量? – 2010-11-23 08:17:06
- 1. 在Java中逐行讀取docx文件
- 2. 從更新日誌文件中實時地逐行讀取
- 3. nodejs同步逐行讀取大文件?
- 4. 異步逐行文件讀取
- 5. Java 8 - 如何在java中逐行讀取文件?
- 6. 我想從日誌文件逐行讀取到一個php文件
- 7. 導入文本文件並在Java中逐行讀取
- 8. 在Java中逐行讀取文本文件的最快方法
- 9. php讀取大文本文件日誌
- 10. 在Rust中逐行讀取大文件
- 11. 在PowerShell中逐行讀取文件
- 12. 在Prolog中逐行讀取文件
- 13. 使用Java從日誌文件中讀取Stacktrace
- 14. 逐行讀取文件,逐字符C
- 15. Java - 如何逐字讀取大文件而不是逐行讀取?
- 16. 逐行讀取csv文件
- 17. C++逐行讀取文件
- 18. 試圖在Java中逐行讀取文件
- 19. Crashlytics無法讀取日誌文件
- 20. Q/kdb +按塊讀取日誌文件
- 21. FastMM4,如何讀取日誌文件?
- 22. 使用PHP讀取IIS日誌文件
- 23. 在Python中讀取日誌文件並輸出特定文本
- 24. 如何在C++中讀取這個日誌文本文件
- 25. 從文件中逐行讀取整數
- 26. 從目錄中逐一讀取文件
- 27. 從一個文件中逐行讀取
- 28. 從cpp文件中逐字讀取
- 29. 逐個讀取文件中的字符
- 30. 的Java的Android獲取日誌文件
」逐步讀取並處理日誌文件。「 - 請添加更多詳細信息。 – darioo 2010-11-22 10:37:02
假設有一個應用程序正在生成日誌(以文件形式),那麼我想編寫一個代碼(使用Java),它將根據需要生成並處理這些最新日誌。第一次讀取日誌不是問題,但我們如何跟蹤最後一條記錄/行讀取?另外,如果由於大小或其他配置的參數而導致文件翻轉,該怎麼辦? – 2010-11-22 11:08:54
當我遇到這個問題時,我在這裏找到了答案:http://www.informit.com/guides/content.aspx?g=java&seqNum=226 – Dan 2011-02-14 12:07:33