Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java taillistener中,如何处理更多日志文件_Java_Logging_Taillistener - Fatal编程技术网

在java taillistener中,如何处理更多日志文件

在java taillistener中,如何处理更多日志文件,java,logging,taillistener,Java,Logging,Taillistener,我正在使用java taillistener监控我的日志文件。每当更新日志文件时,它都会打印日志消息。当监控一个或两个日志文件时,它工作正常。但是当尝试监控更多文件(例如10个文件)时,控制台中不会显示任何消息,即使日志文件中更新了日志。我的代码如下所示 ScheduledThreadPoolExecutor logMonitorThreadPoolExec if (listOfFiles[i].isFile()) { files = listOfFiles[i].getName(); F

我正在使用java taillistener监控我的日志文件。每当更新日志文件时,它都会打印日志消息。当监控一个或两个日志文件时,它工作正常。但是当尝试监控更多文件(例如10个文件)时,控制台中不会显示任何消息,即使日志文件中更新了日志。我的代码如下所示

ScheduledThreadPoolExecutor logMonitorThreadPoolExec

if (listOfFiles[i].isFile()) 
{
 files = listOfFiles[i].getName();
 File pcounter_log = new File(files);                                
 Tailer logMessages = new Tailer(pcounter_log, new FileListener(files,element.getLogPattern()),
                                        5000, true);
 logMonitorThreadPoolExec.scheduleWithFixedDelay(logMessages, 5, 20,
                        TimeUnit.SECONDS);

}

public class FileListener extends TailerListenerAdapter {

 private final String fileName;

 public FileListener(String fileName, ArrayList<String> pattern) {
    this.fileName = fileName;
 }
  public void handle(String line) {

    System.out.println(fileName+"<---->"+line); 
    }
}
if(listOfFiles[i].isFile())
{
files=listOfFiles[i].getName();
文件pcounter_log=新文件(个文件);
Tailer logMessages=new Tailer(pcounter_log,new FileListener(files,element.getLogPattern()),
5000,对);
logMonitorThreadPoolExec.scheduleWithFixedDelay(日志消息,5,20,
时间单位(秒);
}
公共类FileListener扩展了TailerListenerAdapter{
私有最终字符串文件名;
公共FileListener(字符串文件名,ArrayList模式){
this.fileName=文件名;
}
公共无效句柄(字符串行){
System.out.println(文件名+“”+行);
}
}

你能帮我处理一下吗?

我想问题是你用错了零售商

您正试图使用executor服务的线程池来使用Tailer。但是一个Tailer有一个属性,它不会退出它的
run()
方法,直到外部调用
Tailer.stop()
。在你的代码中,这是不会发生的


更糟糕的是,您正在使用一个
ScheduledThreadPoolExecutor
,并告诉它每20秒启动一个新的Tailer线程

因此,将要发生的是,计划的第一次N
Tailer
运行将分别捕获执行器服务的一个线程。。。永远坚持下去。当所有线程都在使用时,执行器将等待其中一个线程完成。。。这不会发生

解决方案是在其自己的专用线程中运行每个Tailer实例。您不应该尝试使用有限线程池中的线程,因为这样会耗尽线程池。出于基本相同的原因,您不应该尝试使用executor服务



如果使用专用线程不起作用,我就没有主意了。您需要亲自查看Tailer代码和/或在调试器下运行应用程序,以便查看Tailer线程的实际操作。

我认为问题在于您使用Tailer的方式不对

您正试图使用executor服务的线程池来使用Tailer。但是一个Tailer有一个属性,它不会退出它的
run()
方法,直到外部调用
Tailer.stop()
。在你的代码中,这是不会发生的


更糟糕的是,您正在使用一个
ScheduledThreadPoolExecutor
,并告诉它每20秒启动一个新的Tailer线程

因此,将要发生的是,计划的第一次N
Tailer
运行将分别捕获执行器服务的一个线程。。。永远坚持下去。当所有线程都在使用时,执行器将等待其中一个线程完成。。。这不会发生

解决方案是在其自己的专用线程中运行每个Tailer实例。您不应该尝试使用有限线程池中的线程,因为这样会耗尽线程池。出于基本相同的原因,您不应该尝试使用executor服务



如果使用专用线程不起作用,我就没有主意了。您需要亲自查看Tailer代码和/或在调试器下运行应用程序,以便查看Tailer线程的实际操作。

此代码不会编译。第7行不是有效的Java。如果您能为我们提供真实的代码片段,这会有所帮助。。。这是我真正的代码片段。只是删除了“}”。
ScheduledThreadPoolExecutor logMonitorThreadPoolExec.scheduleWithFixedDelay(logMessages,5,20,TimeUnit.SECONDS)
既不是有效的Java语句,也不是有效的Java声明。此代码不会编译。第7行不是有效的Java。如果您能为我们提供真实的代码片段,这会有所帮助。。。这是我真正的代码片段。只是删除了“}”。
ScheduledThreadPoolExecutor logMonitorThreadPoolExec.scheduleWithFixedDelay(logMessages,5,20,TimeUnit.SECONDS)既不是有效的Java语句,也不是有效的Java声明。我还尝试了以下代码。if(listOfFiles[i].isFile(){files=listOfFiles[i].getName();File pcounter_log=new File(files);TailerListener=new FileListener(files,element.getLogPattern());Tailer-Tailer=new Tailer(pcounter_log,listener,5000);Thread Thread=new Thread(tailer);Thread.start();}}}但我仍然面临同样的问题。你确定文件名正确吗?在启动每个tailer之前,尝试检查
file.exist()
。我也尝试了以下代码。if(listOfFiles[i].isFile(){files=listOfFiles[i].getName();文件pcounter_log=新文件(文件);TailerListener=新文件侦听器(文件,元素.getLogPattern());Tailer-Tailer=新的Tailer(pcounter_log,侦听器,5000);Thread-Thread=新线程(Tailer);Thread.start();}}但我仍然面临同样的问题。您确定文件名正确吗?在启动每个零售商之前,请尝试使用
file.exist()
检查文件名。