C# 为什么电子邮件跟踪侦听器阻止其他侦听器工作?
我们使用企业库应用程序块6来实现日志记录。我们有两个跟踪侦听器,一个用于登录数据库,另一个用于发送电子邮件警报。它们的配置如下所示:C# 为什么电子邮件跟踪侦听器阻止其他侦听器工作?,c#,logging,enterprise-library,C#,Logging,Enterprise Library,我们使用企业库应用程序块6来实现日志记录。我们有两个跟踪侦听器,一个用于登录数据库,另一个用于发送电子邮件警报。它们的配置如下所示: <loggingConfiguration name="Logging Application Block" tracingEnabled="true" defaultCategory="MyProject" logWarningsWhenNoCategoriesMatch="true"> <listeners> &
<loggingConfiguration name="Logging Application Block" tracingEnabled="true" defaultCategory="MyProject" logWarningsWhenNoCategoriesMatch="true">
<listeners>
<add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener,Microsoft.Practices.EnterpriseLibrary.Logging.Database" ... />
<add name="Email Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.EmailTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" ... />
</listeners>
<categorySources>
<add switchValue="All" name="MyProject">
<listeners>
<add name="Email Trace Listener" />
<add name="Database Trace Listener" />
</listeners>
</add>
</categorySources>
...
</loggingConfiguration>
<listeners>
<add name="Database Trace Listener" />
<add name="Email Trace Listener" />
</listeners>
...
我们的问题是,如果电子邮件跟踪侦听器由于某种原因无法工作(例如SMTP服务器关闭),那么数据库跟踪侦听器也无法工作。有没有办法配置DB Trace Listener,使其即使在电子邮件跟踪失败的情况下也能正常工作?看来我已经设法解决了这个问题,我必须颠倒侦听器的顺序,如下所示:
<loggingConfiguration name="Logging Application Block" tracingEnabled="true" defaultCategory="MyProject" logWarningsWhenNoCategoriesMatch="true">
<listeners>
<add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener,Microsoft.Practices.EnterpriseLibrary.Logging.Database" ... />
<add name="Email Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.EmailTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" ... />
</listeners>
<categorySources>
<add switchValue="All" name="MyProject">
<listeners>
<add name="Email Trace Listener" />
<add name="Database Trace Listener" />
</listeners>
</add>
</categorySources>
...
</loggingConfiguration>
<listeners>
<add name="Database Trace Listener" />
<add name="Email Trace Listener" />
</listeners>
我可以看到这种行为的一些基本原理,但是我仍然不理解为什么在第一种情况下至少DB侦听器不工作。如果一个源配置了多个跟踪侦听器,则当任何跟踪侦听器中发生错误时,处理将停止。i、 e.故障后配置的任何跟踪侦听器都不会执行(对于该源)。我不喜欢这种方法,因为我更喜欢独立处理所有侦听器。