簡體   English   中英

企業庫3.1-如果一個偵聽器失敗,則將永遠不會執行后續的偵聽器

[英]enterprise library 3.1 - if one listener is failed then subsequent listener will be never executed

我正在使用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失敗,則將永遠不會執行自定義跟蹤偵聽器A和自定義跟蹤偵聽器B。

有人可以幫忙嗎?

感謝Mitesh Patel

此行為似乎是“設計使然”。 請參閱Windows XP SP3上Microsoft Enterprise Library 4.1日志記錄失敗的答案。

當然,這並不能真正幫助您。 一種解決方法是將一個偵聽器附加到類別。 因此,對於您的3個聽眾,您可以添加3個類別。 這會起作用,但不是特別優雅。

由於您指示您正在使用2個自定義跟蹤偵聽器,因此減輕此問題的另一種方法是對自定義跟蹤偵聽器進行編碼,以吞噬任何異常(盡管通常不是一個好主意)。 您還可以將跟蹤偵聽器從發生失敗的可能性降到最低。 例如,數據庫>事件日志>平面文件。 在您的方案中,將自定義跟蹤偵聽器放在數據庫跟蹤偵聽器之前。

將跟蹤偵聽器添加到錯誤類別也是一個好習慣。 不知道您的應用程序中是否包含該文件(但發布的配置沒有)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM