是否可以在不使用整个企业库日志记录AB的情况下使用企业库4.1跟踪侦听器?我更喜欢简单地使用.NET诊断跟踪,但希望设置一个侦听器,用于发送有关错误事件的电子邮件。我想我可以使用企业库emailtracelistener。但是,我最初的配置尝试失败了。以下是我希望的工作:
<system.diagnostics>
<trace autoflush="false" />
<sources>
<source name="SampleSource" switchValue="Verbose" >
<listeners>
<add name="textFileListener" />
<add name="emailListener" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="textFileListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="..\trace.log" traceOutputOptions="DateTime">
<filter type="System.Diagnostics.EventTypeFilter" initializeData="Verbose" />
</add>
<add name="emailListener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.EmailTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging" toAddress="to@example.com" fromAddress="from@example.com" smtpServer="mail.example.com" >
<filter type="System.Diagnostics.EventTypeFilter" initializeData="Verbose" />
</add>
</sharedListeners>
</system.diagnostics>
然而,我得到
[ArgumentException: The parameter 'address' cannot be an empty string.
Parameter name: address]
System.Net.Mail.MailAddress..ctor(String address, String displayName, Encoding displayNameEncoding) +1098157
System.Net.Mail.MailAddress..ctor(String address) +8
Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.EmailMessage.CreateMailMessage() +256
Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.EmailMessage.Send() +39
Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.EmailTraceListener.Write(String message) +96
System.Diagnostics.TraceListener.WriteHeader(String source, TraceEventType eventType, Int32 id) +184
System.Diagnostics.TraceListener.TraceEvent(TraceEventCache eventCache, String source, TraceEventType eventType, Int32 id, String format, Object[] args) +63
System.Diagnostics.TraceSource.TraceEvent(TraceEventType eventType, Int32 id, String format, Object[] args) +198
System.Diagnostics.TraceSource.TraceInformation(String message) +14
这让我相信.NET跟踪代码并不关心我为emailListener提供的“非标准”配置属性。我还尝试添加适当的实验室配置声明,并:
<loggingConfiguration>
<listeners>
<add toAddress="to@example.com" fromAddress="from@example.com" smtpServer="mail.example.com" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.EmailTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging" name="emailListener" />
</listeners>
</loggingConfiguration>
这也会导致相同的异常。我认为可以通过编程方式配置emailTraceListener,但我更喜欢它是配置驱动的。我也理解我可以实现我自己的traceListener派生。
那么,是否可以在不使用整个ent lib实验室的情况下使用ent lib tracelisteners,并从配置文件配置它们?
更新
:检查完代码后,我发现这是不可能的。尽管.NET traceListener文档中有建议,但ent lib traceListener实际上没有使用它们在重写traceListener.getSupportedAttributes()中指定的配置属性。臭虫归档。