2011-05-18 137 views
1

我用java taillistener监控我的日志files.Whenever日志文件被更新多个日志文件,将打印日志message.when电动状态的一个或两个日志文件,它的工作fine.But当试图监视更多文件(比如10个文件)时,控制台中不会显示任何消息,甚至日志文件也会更新。我的代码如下所示。在java中taillistener,如何处理

的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); 
    } 
} 

你能帮我处理吗?

+0

此代码不会编译。第七行不是有效的Java。如果您向我们提供了真实的代码片段......这不是被黑客入侵的东西,这会有所帮助。 – 2011-05-18 06:33:40

+0

这是我真正的snippet.just删除了“}”。 – ssbecse 2011-05-18 06:37:47

+0

'ScheduledThreadPoolExecutor logMonitorThreadPoolExec.scheduleWithFixedDelay(logMessages,5,20,TimeUnit.SECONDS);'既不是有效的Java语句也不是有效的Java声明。 – 2011-05-18 06:47:45

回答

1

我觉得现在的问题是,你正在使用的赣骏走错了路。

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

更糟糕的是,您使用的是ScheduledThreadPoolExecutor,并告诉它开始一个新的线程赣骏每20秒!

所以会发生什么是第一个N Tailer运行计划将分别抓住执行程序服务的线程之一...并永远挂在它。当所有线程都在使用时,执行程序将等待其中一个线程完成...并且不会发生。

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


如果使用专用线程不起作用,我就没有想法。您需要自己查看Tailer代码并/或在调试器下运行您的应用程序,以便您可以看到Tailer线程实际上在做什么。

+0

另外我试图与下面的代码。如果(listOfFiles [I] .isFile()){ 文件 = listOfFiles [I] .getName(); \t \t \t \t \t \t \t 文件pcounter_log =新的文件(文件); \t \t \t \t \t \t \t \t TailerListener听者=新FileListener(文件,element.getLogPattern()); Tailer tailer = new Tailer(pcounter_log,listener,5000); Thread thread = new Thread(tailer); thread.start(); } }但仍然面临同样的问题 – ssbecse 2011-05-18 06:50:30

+0

您确定这些文件名是正确的吗?在开始每个零售商之前,试着用'file.exist()'检查。 – 2011-05-18 07:21:25