在java TailListener中,如何避免重复的日志消息

时间:2011-05-07 13:34:21

标签: java file-io apache-commons-io

我的代码如下。

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

    try {
        TailerListener listener = new PCTailListener();
        Tailer tailer = new Tailer(pcounter_log, listener, 5000,true);

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

public class PCTailListener extends TailerListenerAdapter {
 public void handle(String line) {
  System.out.println(line);
 }
}

.ie,我正在监视日志文件。每当日志文件(c:\ development \ temp \ test.log)中更新日志消息时,它将打印日志消息。

问题是,每当日志文件中的日志消息更新时,它会显示相同的日志消息两次,有时也会显示三次或四次。以避免这些重复的日志消息。

3 个答案:

答案 0 :(得分:5)

重复消息的原因之一是,如果您使用Tailer.create静态方法创建Tailer,它会自动启动监视日志的过程。

我们犯了一个错误:做一个tailer.run,它启动另一个监控实例并打印两次相同的条目。

答案 1 :(得分:0)

看看Tailer的代码,我看不出这是怎么回事。您确定没有运行该文件的多个副本,并且该消息实际上并未在日志文件中重复。

答案 2 :(得分:0)

以下代码通过两次调用TailerListenerAdapter:handle函数消除了该问题。

TailerListener listener = new TailerListener(topic);
Tailer tailer = new Tailer(new File(path), listener, sleep, true);
Thread thread = new Thread(tailer);
thread.setDaemon(true);
thread.start();