2011-01-24 81 views
2

我有一個使用Ent Lib 4.1日誌記錄應用程序塊的應用程序。此應用程序運行在XP SP2 +,Windows Vista和Windows 7上。Microsoft企業庫4.1日誌記錄在Windows XP SP3上失敗

大多數情況下,我的記錄工作正常。 (它通常以事件日誌跟蹤偵聽器爲目標。)有時候,我不確定是什麼觸發它,Windows XP機器只會停止日誌記錄。我已經嘗試添加一個平面文件跟蹤監聽器來查看問題是否與事件日誌,但平面文件也不起作用。重新啓動也不能解決它。

在所有失敗的機器上,它以前一直在工作。它似乎也與Windows XP SP2/SP3隔離。它不會發生在Vista或7上。

想法?

更新:我試圖刪除所有跟蹤監聽器,除了平面文件,這工作。所以問題出在事件日誌跟蹤監聽器上,顯然無論發生什麼事情都會導致Ent Lib完全無法記錄任何內容 - 包括有關日誌記錄過程的錯誤。

回答

3

@RMD,你是對的。當引發異常(例如事件日誌已滿)時,該異常會導致該類別的所有其他跟蹤偵聽器不被處理。

任何 跟蹤偵聽器都不會記錄日誌條目。

另一方面,這不完全正確。是的,所有常規跟蹤偵聽器都不會被處理,但仍然存在特殊源錯誤。我建議將其設置爲自己的文件(在我的經驗,事件日誌將給予權限等更多的問題)來捕獲任何記錄錯誤:

<specialSources> 
    <errors switchValue="All" name="Logging Errors &amp; Warnings"> 
    <listeners> 
     <add name="Error Flat File Destination" /> 
    </listeners> 
    </errors> 
</specialSources> 

如果是這樣的設置適當的權限和磁盤不是滿(等),那麼你會看到該日誌文件中的錯誤與原始信息一起:

Message: Tracing to LogSource 'Your Event Source' failed. Processing for other sources will continue. See summary information below for more information. Should this problem persist, stop the service and check the configuration file(s) for possible error(s) in the configuration of the categories and sinks. 

Summary for Enterprise Library Distributor Service: 
====================================== 
[Original Log Entry] 

Exception Information Details: 
====================================== 
Exception Type: System.ComponentModel.Win32Exception 
NativeErrorCode: 1502 
ErrorCode: -2147467259 
Message: The event log file is full 
Data: System.Collections.ListDictionaryInternal 
TargetSite: Void InternalWriteEvent(UInt32, UInt16, System.Diagnostics.EventLogEntryType, System.String[], Byte[], System.String) 
HelpLink: NULL 
Source: System 

所以,你會得到你也許能夠提取和手動插入到任何記錄您的原始日誌信息您保存的歷史記錄(例如報告,分析)。另外作爲獎勵,你會得到有關爲什麼無法寫入日誌條目的信息,以便它可以(希望!)得到補救。

1

我想通了。顯然,如果一個跟蹤監聽器對某個類別失敗,則不會爲任何跟蹤監聽器記錄日誌條目。換句話說,如果事件日誌跟蹤偵聽器失敗,平面文件跟蹤偵聽器將永遠不會被調用。

在我的情況下,XP機器上的事件日誌已滿。這導致事件日誌跟蹤偵聽器失敗。

相關問題