为什么电子邮件跟踪侦听器会阻止其他侦听器工作?

时间:2014-11-06 08:55:38

标签: c# logging enterprise-library

我们使用Enterprise Library Application Block 6来实现日志记录。我们有两个跟踪侦听器,一个用于记录到数据库,另一个用于发送电子邮件警报。它们的配置如下:

<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>

我们的问题是,如果电子邮件跟踪侦听器由于某种原因不起作用 - 例如SMTP服务器已关闭 - 则数据库跟踪侦听器也不起作用。
有没有办法将数据库跟踪侦听器配置为即使电子邮件跟踪失败也能正常工作?

1 个答案:

答案 0 :(得分:1)

似乎我设法解决了它,我不得不颠倒听众的顺序:

            <listeners>
                <add name="Database Trace Listener" />
                <add name="Email Trace Listener" />
            </listeners>

现在不仅日志记录有效,而且我甚至在日志中收到有关电子邮件跟踪失败的另一条错误消息:

"Tracing to LogSource 'MyProject' 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."

我可以看到这种行为的一些基本原理,但我仍然不明白为什么至少DB听众在第一种情况下没有工作。