【问题标题】:in java TailListener,how to avoid duplicate log messages在 java TailListener 中,如何避免重复的日志消息
【发布时间】:2011-05-07 13:34:21
【问题描述】:

我的代码如下。

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)中更新日志消息时,它都会打印日志消息。

问题是,每当更新日志文件中的日志消息时,它会显示相同的日志消息两次,有时还会显示三到四次。如何避免这种重复的日志消息。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 能否请你给出一个示例代码以避免打印两次,我也有这个问题@BPeela
    • 这是不正确的。从 OP 发布的代码来看,Tailer.create 没有被调用。还有其他事情发生。
    【解决方案2】:

    以下代码消除了两次调用 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(); 
    

    【讨论】:

      【解决方案3】:

      查看 Tailer 的代码,我不明白这是怎么发生的。您确定您没有运行多个尾部副本,并且这些消息实际上并未在日志文件中重复。

      【讨论】:

        猜你喜欢
        • 2023-01-12
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-07
        • 2015-10-22
        • 1970-01-01
        相关资源
        最近更新 更多