2011-08-24 43 views
1

我在Windows 2008 R2框上設置了Confluence 3.5站點。它使用Tomcat 6,我已經配置它使用log4j來訪問特定空間的日誌記錄。日誌記錄工作正常,但現在我想在.NET中編寫Windows服務來每天對日誌數據進行一些特定的分析。在我的服務中,我使用File.ReadAllText讀取整個文件(文件本身並不大,也不是XML)。但是當它試圖這樣做時,我得到一個IO異常,表明該文件正在被另一個進程使用。從.NET應用程序中讀取Confluence日誌文件

我試過各種東西來解決這個問題,但到目前爲止我似乎無法從代碼中讀取日誌文件。我可以登錄到服務器並使用Windows資源管理器複製它。但是如果我嘗試在服務中這樣做,我會得到同樣的錯誤。我已經瀏覽了Web的各種方式來閱讀日誌文件,或者可能更改記錄器以使文件獨佔打開,但我沒有找到任何東西。我不確定它是否是Confluence,Tomcat或者首先打開文件的log4j。

有關如何使用自定義程序從訪問日誌中讀取的任何建議?

回答

2

由於性能方面的原因,記錄器可能會鎖定文件(例如,因此它不必經常打開文件)。要確認這一點,請登錄服務器並使用UnlockerProcess Explorer檢查文件上是否有打開的句柄。

您應該能夠配置記錄器,使其不鎖定鎖定。我之前沒有使用過log4j,但是查看手冊/網站 - 會有些事情可以做。

1

您可以在C#中使用FileShare.ReadWrite打開FileStream(String, FileMode, FileAccess, FileShare)

FileStream logFileStream = new FileStream("C:\path\to\file.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
StreamReader logFileReader = new StreamReader(logFileStream); 

這應該防止你的文件流試圖鎖定該文件,並且不應拋出異常。

如果你只是使用CTOR沒有文件共享枚舉參數流每股股價在默認情況下,文件僅適用於閱讀:

FileShare.Read是爲那些的FileStream構造函數沒有一個文件共享參數的默認。 (see remarks

相關問題