2009-12-11 3 views
0

전체 엔터프라이즈 라이브러리 로깅 AB를 사용하지 않고 Enterprise Library 4.1 TraceListeners를 사용할 수 있습니까? .NET Diagnostics Tracing을 사용하는 것을 선호하지만 Error 이벤트에 대한 전자 메일을 보내는 수신기를 설치하려고합니다. 엔터프라이즈 라이브러리 EmailTraceListener를 사용할 수 있다고 생각했습니다. 그러나 초기 설정 시도가 실패했습니다.엔터프라이즈 라이브러리 TraceListeners의 경량 사용

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

을 나는 .NET 내가 제공 한 속성 코드는 "비표준"설정에 대해 상관하지 않는다 추적 믿고 날 리드

[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 

를 얻을 그러나 : 여기 일하는 것이 기대거야 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 LAB 전체를 사용하지 않고 Ent Lib TraceListeners를 사용하고 설정 파일에서 구성 할 수 있습니까?

업데이트 : 코드를 검토 한 결과, 가능하지 않음을 발견했습니다. Ent Lib TraceListeners는 .NET TraceListener 문서의 권장 사항에도 불구하고 실제로 TraceListener.GetSupportedAttributes()를 재정의 할 때 지정한 구성 속성을 활용하지 않습니다. 버그 신고.

+0

가볍고 동일한 문장의 EntLib? ;-) –

+0

하하. 그리고 그것은 불가능한 것을 요청하고 있었다. –

답변

3

이 특정 목적을 위해 경량의 UKADC.Diagnostics 라이브러리를 여러 프로젝트에 사용했습니다. SMTPTraceListener와 SQLTraceListener를 무료로 사용할 수 있습니다.

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

+0

아주 멋지 네요, 이것에 대해 살펴 보겠습니다. 고맙습니다. –

+0

네, 확실히이 라이브러리가 프레임 워크에서 System.Diagnostics를 활용하려고합니다. 단. –

관련 문제