是否可以在不使用整个Enterprise Library Logging AB的情况下使用Enterprise Library 4.1 TraceListeners?我更喜欢简单地使用.NET诊断跟踪,但是想设置一个在Error事件上发送电子邮件的监听器。我想我可以使用企业库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提供的“非标准”配置属性。我还尝试添加适当的LAB configSection声明和:
<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 TraceListeners而不使用整个Ent Lib LAB,并从配置文件中配置它们?
更新:检查完代码后,我发现这是不可能的。尽管.NET TraceListener文档中提出了建议,但Ent Lib TraceListeners实际上并未使用它们在重写TraceListener.GetSupportedAttributes()时指定的配置属性。 Bug已提交。
答案 0 :(得分:3)
出于这个特定目的,我现在在几个项目中使用了轻量级UKADC.Diagnostics库。 它为您提供了一个易于使用的SMTPTraceListener和一个免费的SQLTraceListener。
http://ukadcdiagnostics.codeplex.com/wikipage?title=SmtpTraceListener&referringTitle=Home