企业库3.1 - 如果一个侦听器失败,则后续侦听器将永远不会被执行

时间:2011-10-11 06:35:11

标签: enterprise-library

我正在使用Enterprise Library 3.1的Msmqdistributor服务来分发来自各种应用程序的日志。我已经在categorySources / specialSources中定义了多个侦听器,但如果一个侦听器失败,则后续侦听器将永远不会被执行。

以下是我的配置代码。

<specialSources>
      <allEvents switchValue="Warning" name="All Events">
        <listeners>
          <add name="Database Listener A" />          
          <add name="Custom Trace Listener A" />
          <add name="Custom Trace Listener B" />
        </listeners>
      </allEvents>
      <notProcessed switchValue="Warning" name="Unprocessed Category" />        
      <errors switchValue="Warning" name="Logging Errors &amp; Warnings"/>        
</specialSources>

如果我为数据库侦听器A 指定了错误的连接字符串,则无法在数据库中插入日志。但它也会停止下一个自定义跟踪侦听器A和自定义跟踪侦听器B 的作业。如果数据库侦听器A 失败了。

有人可以帮忙吗?

由于 Mitesh Patel

1 个答案:

答案 0 :(得分:1)

这种行为似乎是“按设计”。请参阅Microsoft Enterprise Library 4.1 Logging Fails on Windows XP SP3的答案。

当然,这对你没有帮助。一种解决方法是将一个侦听器附加到一个类别。因此,对于您的3位听众,您可以添加3个类别。这样可行,但不是特别优雅。

由于您表明您正在使用2个自定义跟踪侦听器,因此另一种缓解此问题的方法是编写自定义跟踪侦听器以吞下任何异常(但通常不是一个好主意)。您还可以订购跟踪侦听器,使其最不可能失败,最有可能失败。例如。数据库&gt;事件日志&gt;平面文件。在您的场景中,将自定义跟踪侦听器放在数据库跟踪侦听器之前。

将跟踪侦听器添加到错误类别也是一种好习惯。不确定你的应用程序中是否有(但发布的配置没有)。