java - 在java中,如何在线程中获取文件名

标签 java logging

我有一个名为 fileListArrayList。它包含文件名列表。通过 for 循环,我为每个文件名创建线程并使用 TailListener Java API 监视文件。现在我想获取文件中每条消息的文件名。

fileListener= new fileListener();

for(int i=0;i<fileList.Size();i++)
{           
   monitorFile(filelist.get(i));            
}

private void monitorFile(String logFile) {

         File pcounter_log = new File(logFile);

         Tailer = new Tailer(pcounter_log, fileListener, 5000);   

         ThreadPoolExec.scheduleAtFixedRate(Tailer, 5, 5, TimeUnit.SECONDS);    
    }


public class fileListener extends TailerListenerAdapter {

String s= "abc";

    public void handle(String line) {

            if(line.contains(s)){
                System.out.println(line);
            }
    }
}

在上面的代码中,如何获取相应日志消息的文件名?

最佳答案

一种简单的方法是为每个文件使用单独的监听器:

将您的 fileListener 类更改为如下所示:

public class FileListener extends TailerListenerAdapter {

    private final String fileName;

    public FileListener(String fileName) {
         this.fileName = fileName;
    }

    public void handle(String line) {
         if(line.contains(s)){
             System.out.println(fileName + ": " + line);
         }
    }
}

然后只需为您监视的每个文件实例化一个新的FileListener:

private void monitorFile(String logFile) {
     File pcounter_log = new File(logFile);
     Tailer = new Tailer(pcounter_log, new FileListener(logFile), 5000);   
     ThreadPoolExec.scheduleAtFixedRate(Tailer, 5, 5, TimeUnit.SECONDS);    
}

关于java - 在java中,如何在线程中获取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5617809/

相关文章:

java - 使用具有文件大小限制和文件数量限制的 Logger

logging - 如何使用K8S_HOST_URL,以及在EFK中需要什么

jquery - 如何在 Chrome 中 console.log jQuery DOM 元素?

java - 加载 .properties 文件而不重新启动 WebLogic 服务器 - ADF 应用程序

Java - SaxParser/DocumentBuilder "failing"获取正确的标签主体

java - 如何使用java中的Twitter API获取去年至今的推文?

c++ - Poco Logger 更改 Message 参数

java - 使用 log4j2 和 logback

java - 尝试用 Java 编写一个方法,在给定 customerID 的情况下搜索数据库列表并返回 Customer 对象

java - 是否可以在 Java 中为枚举创建动态代理?