Легкое использование TraceListeners Enterprise Library

Можно ли использовать TraceListeners Enterprise Library 4.1 без использования всего AB Enterprise Library Logging? Я бы предпочел просто использовать трассировку диагностики .NET, но хотел бы настроить прослушиватель, который отправляет электронные письма при возникновении ошибок. Я подумал, что могу использовать EmailTraceListener Enterprise Library. Однако мои первые попытки настроить его не увенчались успехом. Вот что, как я надеялся, сработает:

<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="[email protected]" fromAddress="[email protected]" 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="[email protected]" fromAddress="[email protected]" 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, и настраивать их из файла конфигурации?

Обновление: изучив код, я обнаружил, что это невозможно. Ent Lib TraceListeners на самом деле не используют атрибуты конфигурации, которые они указывают в переопределении TraceListener.GetSupportedAttributes(), несмотря на рекомендации в документации .NET TraceListener. Ошибка зарегистрирована.


person G-Wiz    schedule 11.12.2009    source источник
comment
Легкий и EntLib в одном предложении? ;-)   -  person Sky Sanders    schedule 25.04.2010
comment
Ха-ха, и оказалось, я просил невозможного.   -  person G-Wiz    schedule 25.04.2010


Ответы (1)


Для этой конкретной цели я использовал облегченную библиотеку UKADC.Diagnostics в нескольких проектах. Он дает вам простой в использовании SMTPTraceListener и SQLTraceListener бесплатно.

http://ukadcdiagnostics.codeplex.com/wikipage?title=SmtpTraceListener&referringTitle=Home

person DickB    schedule 11.05.2010
comment
Да, мне определенно нравится, что эта библиотека нацелена на использование возможностей System.Diagnostics во фреймворке. Сладкий. - person G-Wiz; 11.05.2010