2011-01-24 83 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机器上的事件日志已满。这导致事件日志跟踪侦听器失败。

相关问题