我有一个使用Ent Lib 4.1日志记录应用程序块的应用程序。此应用程序在XP SP2 +,Windows Vista和Windows 7上运行。
大多数时候,我的日志记录工作正常。 (它通常以事件日志跟踪侦听器为目标。)有时候,我不确定触发它的是什么,Windows XP机器只会停止记录。我已经尝试添加一个平面文件跟踪侦听器,以查看问题是否与事件日志有关,但平面文件也不起作用。重新启动也无法修复它。
在所有失败的机器上,它以前一直在工作。它似乎也与Windows XP SP2 / SP3隔离。它不会发生在Vista或7上。
想法?
更新:我尝试删除除平面文件之外的所有跟踪侦听器,这很有用。因此,问题在于事件日志跟踪侦听器,显然正在发生的任何事情导致Ent Lib完全无法记录任何内容 - 包括有关日志记录过程的错误。
答案 0 :(得分:3)
@RMD,你是对的。当引发异常时(例如,事件日志已满),该异常将导致不处理该类别的所有其他跟踪侦听器。
另一方面,这并非完全正确。是的,所有常规跟踪侦听器都不会被处理,但仍然存在错误特殊来源。我建议将其设置为自己的文件(根据我的经验,EventLog将提供更多权限等问题)来捕获任何日志记录错误:不记录任何日志条目 跟踪听众。
<specialSources>
<errors switchValue="All" name="Logging Errors & 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 :(得分:1)
我明白了。显然,如果某个类跟踪侦听器失败,则不会记录任何跟踪侦听器的日志条目。换句话说,如果事件日志跟踪侦听器失败,则永远不会调用平面文件跟踪侦听器。
就我而言,XP机器上的事件日志已满。这导致事件日志跟踪侦听器失败。