2011-10-11 2 views
1

다양한 응용 프로그램의 로그를 배포하기 위해 Enterprise Library 3.1의 Msmqdistributor 서비스를 사용하고 있습니다. categorySources/specialSources에 여러 리스너를 정의했지만 하나의 리스너가있는 경우 후속 청취자보다 실패하면 결코 실행되지 않습니다.엔터프라이즈 라이브러리 3.1 - 하나의 리스너가 실패한 경우 후속 리스너가 실행되지 않습니다.

다음은 설정 코드입니다.

<specialSources> 
     <allEvents switchValue="Warning" name="All Events"> 
     <listeners> 
      <add name="Database Listener A" />   
      <add name="Custom Trace Listener A" /> 
      <add name="Custom Trace Listener B" /> 
     </listeners> 
     </allEvents> 
     <notProcessed switchValue="Warning" name="Unprocessed Category" />   
     <errors switchValue="Warning" name="Logging Errors &amp; Warnings"/>   
</specialSources> 

것은 그때가 데이터베이스에 로그를 삽입하는 데 실패합니다 데이터베이스 리스너에 대한 잘못된 연결 문자열을 지정하고있는 경우. 그러나 사용자 정의 추적 리스너 A 및 사용자 정의 추적 리스너 B. 여기서 사용자 정의 추적 리스너 A 및 사용자 정의 추적 리스너 B는 데이터베이스 수신기 A에 실패한 경우 절대로 실행되지 않습니다.

아무도 도와 드릴 수 있습니까?

감사 Mitesh 파텔

답변

1

이 문제는 "디자인"이 될 것으로 보인다. Microsoft Enterprise Library 4.1 Logging Fails on Windows XP SP3에 대한 답변보기

물론 이것은 실제로 도움이되지 않습니다. 한 가지 해결 방법은 범주에 하나의 수신기를 연결하는 것입니다. 따라서 3 명의 청취자에게는 3 개의 카테고리를 추가 할 수 있습니다. 이것은 효과가 있지만 특히 우아하지는 않습니다.

사용자 지정 추적 수신기를 사용하고 있음을 나타내므로이 문제를 완화하기위한 또 다른 방법은 사용자 지정 추적 수신기를 코딩하여 예외를 삼키도록하는 것입니다 (일반적으로 좋은 생각은 아닙니다). 또한 추적 청취자에게 실패 할 가능성이 가장 적은 것부터 실패 할 가능성이 큰 것부터 순서대로 지정할 수 있습니다. 예 : 데이터베이스> 이벤트 로그> 플랫 파일. 시나리오에서 데이터베이스 추적 수신기 앞에 사용자 지정 추적 수신기를 배치하십시오.

오류 범주에 추적 수신기를 추가하는 것도 좋습니다. 확실하지 않은 경우 귀하의 애플 리케이션이나 안 (하지만 게시 된 구성하지 않습니다).

+0

안녕하세요, Tuzo, 답장을 보내 주셔서 감사합니다. 그러나 현재의 요구 사항에서 Listener의 예외를 억제하고 후속 Listeners.I에서 계속 진행합니다. 내장 리스너이기 때문에 Database Listener에서 예외를 삼킬 수 없습니다. 또한 어떤 예외에 대해서도 에 리스너를 지정할 수 있지만 여기에서도 같은 상황이 발생합니다. – mit

+0

@ user988917 : 예, 데이터베이스 리스너를 사용할 수 없다는 것을 알고 있습니다. 그래서 내가 마지막에 넣는 것이 좋습니다. EL 소스에서 자신 만의 데이터베이스 리스너를 생성 한 다음 거기에 던져 넣지 않아도됩니다. 물론, 문제가 있다는 것을 알기 위해 어떻게 든 그 실패를 캡쳐하고 기록하기를 원할 것입니다. –

+1

Tuzo에게 다시 한 번 감사드립니다. 하지만 모든 청취자가 원하는 경우 오류가 발생하면 오류가 표시되지 않습니다. LogSource 및 LogWriter의 상속 클래스를 상속 받아 솔루션을 얻었습니다. – mit

관련 문제