gpt4 book ai didi

java - Apache Commons IO Tailer 传送旧日志消息

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:49 24 4
gpt4 key购买 nike

我的代码如下。

public static void main(String[] args) {
// TODO code application logic here
File pcounter_log = new File("c:\development\temp\test.log");

try {

Tailer tailer = new Tailer(pcounter_log, new FileListener("c:\development\temp\test.log",getLogPattern()), 5000,true);

Thread thread = new Thread(tailer);
thread.start();
} catch (Exception e) {
System.out.println(e);
}
}

public class FileListener extends TailerListenerAdapter {


public void handle(String line) {
for (String logPattern : pattern) {
if (line.contains(logPattern)) {
logger.info(line);

}
}
}
}

此处 getLogPattern() 返回一个 ArrayList,其中包含 [info,error,abc.catch,warning] 等值。运行此代码时,我收到旧日志消息后跟新日志消息。 IE。输出是这样的:

20 May 2011 07:06:02,305  INFO FileListener:? - 20 May 2011 07:06:01,230 DEBUG   - exiting readScriptErrorStream()
20 May 2011 07:06:55,052 INFO FileListener:? - 20 May 2011 07:06:55,016 DEBUG - readScriptErrorStream()
20 May 2011 07:06:56,056 INFO FileListener:? - 20 May 2011 07:06:55,040 DEBUG - exiting readScriptErrorStream()
20 May 2011 07:07:01,241 INFO FileListener:? - 20 May 2011 07:07:01,219 DEBUG - readScriptErrorStream()
20 May 2011 07:07:02,245 INFO FileListener:? - 20 May 2011 07:07:01,230 DEBUG - exiting readScriptErrorStream()
20 May 2011 07:07:55,020 INFO FileListener:? - 20 May 2011 07:07:55,016 DEBUG - readScriptErrorStream()
20 May 2011 07:07:56,024 INFO FileListener:? - 20 2011 07:07:55,030 DEBUG - exiting readScriptErrorStream()
20 May 2011 07:08:01,269 INFO FileListener:? - 20 May 2011 07:08:01,227 DEBUG - readScriptErrorStream()
20 May 2011 07:08:02,273 INFO FileListener:? - 20 May 2011 07:08:01,230 DEBUG - exiting readScriptErrorStream()
20 May 2011 07:08:21,234 INFO FileListener:? - 20 May 2011 06:40:02,461 DEBUG - readScriptErrorStream()
20 May 2011 07:08:22,237 INFO FileListener:? - 20 May 2011 06:40:02,468 DEBUG - exiting readScriptErrorStream()
20 May 2011 07:08:23,242 INFO FileListener:? - 20 May 2011 06:41:01,224 DEBUG - readScriptErrorStream()
20 May 2011 07:08:24,250 INFO FileListener:? - 20 May 2011 06:41:01,232 DEBUG - exiting readScriptErrorStream()
20 May 2011 07:08:25,261 INFO FileListener:? - 20 May 2011 06:42:01,218 DEBUG - readScriptErrorStream()
20 May 2011 07:08:26,265 INFO FileListener:? - 20 May 2011 06:42:01,230 DEBUG - exiting readScriptErrorStream()
20 May 2011 07:08:27,272 INFO FileListener:? - 20 May 2011 06:43:01,223 DEBUG - readScriptErrorStream()
20 May 2011 07:08:28,275 INFO FileListener:? - 20 May 2011 06:43:01,231 DEBUG - exiting readScriptErrorStream()

如何避免像这样从日志文件中获取旧日志消息?

最佳答案

哦,天哪,我浪费了一整天的时间认为这是我狡猾的线程,但我现在看到其他人分享了我的痛苦。哦,好吧,至少我不会再浪费一天时间看它了。

但是我确实看过源代码。我确定错误发生在 Tailer.java 文件中:

boolean newer = FileUtils.isFileNewer(file, last); // IO-279, must be done first
...
...
else if (newer) {
/*
* This can happen if the file is truncated or overwritten with the
* exact same length of information. In cases like this, the file
* position needs to be reset
*/
position = 0;
reader.seek(position);
...

似乎文件修改数据可能会在写入数据之前发生变化。我不是为什么会这样的专家。我正在从网络获取我的日志文件,所以可能正在进行各种缓存,这意味着您不能保证更新的文件将包含更多数据。

我已经更新了源代码并删除了这一部分。对我来说,文件被截断/重新创建的字节数完全相同的可能性很小。我引用的是 10MB 的滚动日志文件。

我看到这是一个已知问题 ( IO-279 LINK HERE )。但是,它被标记为已解决,但显然并非如此。我会联系开发人员,看看是否有什么正在筹备中。看起来他们对修复的看法与我相同。

关于java - Apache Commons IO Tailer 传送旧日志消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6071275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com