回答
虽然它很晚但想到编写我用来实现此功能的方法。
比方说,我们开始一项工作,每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