2013-12-11 109 views
3

我已經創建了簡單的WPF控件來監視日誌文件中的更改。我使用FileSystemWatcher來觀察特定文件。我的配置:使用FileSystemWatcher監視log4net日誌文件

Directory = System.IO.Path.GetDirectoryName(logFileFullPath); 
Filter = System.IO.Path.GetFileName(logFileFullPath); 
NotifyFilter = (NotifyFilters.LastWrite | NotifyFilters.Size); 
EnableRaisingEvents = true; 

問題是隻有在手動刷新目錄或打開日誌文件後纔會顯示更改。

我在我的log4net配置中使用RollingFileAppender,因此應立即寫入更改。

問題是:爲什麼它不工作,以及如何使它工作?

編輯:

此外,當我手動更新其他監視的文件觀察者工作正常。所以它一定是一些log4net問題。

回答

2

我終於想出瞭解決方案。這個問題與FileSystemWatcher無關。我log4net的配置是缺乏行:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

它仍然是相當有趣,因爲我曾與從文本編輯器中打開日誌文件中沒有問題。

0

試試這個代碼,

FileSystemWatcher watcher = new FileSystemWatcher(@"logFileDirectoryPath");  
watcher.Filter = "LogFileNameWithExtension"; 
watcher.EnableRaisingEvents = true; 
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size; 
watcher.Changed += new FileSystemEventHandler(watcher_Changed); 

Changed Event

private void watcher_Changed(object sender, FileSystemEventArgs e) 
{ 
    //Do Something 
} 
+0

它不起作用。 – eklxw

+0

只需使用與Log4Net文件相同的文件名創建一個臨時文件並手動更新該文件並查看是否通知了該文件 – Kurubaran

+0

還要確保您沒有在Using塊中創建FileSystemWatcher實例。 – Kurubaran