2011-05-18 48 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