2010-02-09 7 views
1

로깅 응용 프로그램 블록이 이러한 위치 또는 그 조합을 처리 할 수 ​​있습니까?엔터프라이즈 라이브러리 로깅 응용 프로그램 블록 옵션

  • 로깅이 실패 할 경우 예외 특정 예외/예외 유형에 대한
    • 를 포기하지 않는 유일한
  • 로깅이 실패 할 경우 (즉, 데이터베이스 로깅이 실패 다른 유형 폴백으로 폴백 내 실제 사용 케이스의 이메일로 전송하거나 인터넷 전송)

예 :

,

나는 우리 팀을위한 발권 시스템을 쓰고있다. 새 티켓을 만들 때 팀 이메일을 보내지 못하면 예외/오류 로그에보고하지만 버그는 사용자가 알 수 없도록합니다. 로그인 실패시 폴백 스택의 깊이에 관계없이 사용자는 그렇지 않습니다. 오류 메시지가 필요합니다. 티켓이 저장되었습니다. 몇 가지 오류 위치/예외는 내가 버블 링하려는 것이지만, 지금 다루고있는 대부분의 것들은 그렇지 않습니다.

답변

3

ELLAB에 대한 나의 경험은 그것이 작동하지 않을 때 그 이유를 알아내는 것이 거의 불가능하다는 것입니다. 로깅은 ELLAB과 같은 중량급 구성 요소에 의존하는 시스템의 (보통) 사소한 부분을 구현하는 것입니다. ELLAB은 때로는 무의미한 작업을하는 데 완전히 고통 스러울 수 있습니다.

저는 Log4Net, ELMAH 및 ELLAB의 세 가지 로깅 플랫폼을 사용했으며 자체적으로 롤업했습니다. ELLAB은 EL의 다른 부분들에 의존성이 있으며, 시작하고 실행하기 위해 무거운 것을 들었습니다. L4D L4N은 더 가볍고 동일한 기능을 제공하는 ELLAB의 더 얇은 버전입니다. ELMAH는 웹 사이트의 오류 로깅을위한 훌륭한 라이브러리입니다.

특히 다른 EL 블록을 사용하지 않는 경우 ELLAB 이전에 L4N을 사용하는 것이 좋습니다. 엔터프라이즈 라이브러리에 크게 의존하고 있다면 ELLAB이 최선의 방법 일 수 있습니다. 그러나 아무 일도 일어나지 않으면 행운을 빈다. 웹 사이트는 확실히 ELMAH를 사용해야합니다. 그리고 작은 애플리케이션을 작성하는 경우 자신의 로그 코드를 롤링하는 것에 대해 생각하십시오.

+0

저는 아직 엔터프라이즈 라이브러리에서 아무 것도하지 않았습니다. 시도 할 때마다 EL이 뛰어 다니며 연구 리뷰 및 비교를하고, 리뷰어가 다른 프레임 워크가 더 강력하고 쉽게 생각한다고 봅니다 특정 블록의 경우 – Maslow

+1

엔터프라이즈 라이브러리 철학은 로깅이 응용 프로그램에 대한 부가가치 서비스이므로 로깅 프로세스의 모든 오류를 주 비즈니스 프로세스에 예외를 발생시키지 않으면 서 정상적으로 처리해야한다는 철학입니다. Logging 블록은 모든 로깅 실패를 Logging Errors & Warnings이라는 특별한 카테고리로 전송함으로써이를 달성합니다. 기본적으로 이러한 오류 메시지는 Windows 이벤트 로그에 기록되지만 원하는 경우 다른 추적 수신기를 사용하여이 범주를 구성하여 다른 대상에 쓸 수 있습니다. 종속성으로 –

+0

이 유일한 DLL이 LAB가 달려있는이 : Microsoft.Practices.EnterpriseLibrary.Common.dll Microsoft.Practices.Unity.dll Microsoft.Practices.Unity.Interception.dll Microsoft.Practices.ServiceLocation.dll 이것은 EntLib 배관의 핵심입니다. –

1

웹 로깅에는 ELMAH를 사용하고 그 밖의 모든 것에 대해서는 EL 로깅 블록을 사용합니다. EL 로깅 블록은 귀하가 요청한 것을 수행 할 수있을만큼 융통성이 있음을 발견했습니다.

필자는 로깅 로직을 일부 로깅 클래스로 래핑하고 예외 상황을 어떻게 처리하는지 처리 할 것입니다.

+0

다른 시스템에 대한 폴백을 원한다면 어떻게 작동합니까? 동일한 앱에서 여러 개의 EL 로깅 블록을 사용할 수 있습니까? 또는 주요 .config 파일 스파게티가 발생할 것입니까? – Maslow

2

로깅이 방법으로 클래스 LoggingInstrumentationProvider의 failureLoggingError 이벤트를 사용할 수 있습니다 던져하지 않는 경우

LoggingInstrumentationProvider instrumentation = Logger.Writer.GetInstrumentationEventProvider() as LoggingInstrumentationProvider; 

instrumentation.failureLoggingError += (s, z) => { throw z.Exception; }; 

.... 

.... 

//Logging code 

Logger.Write(new LogEntry() { Message = "bla bla", Severity = TraceEventType.Critical}); 
+0

logger.writer에 GetInstrumentationEventProvider 메소드가 없으므로 instrumentation에 대한 참조를 가져올 수 없습니다. 이 엔터프라이즈 라이브러리는 5입니까? –

3

매슬로우는 다른 응답에 내 의견을 참조하십시오. 또한 개발자 가이드 (As Easy As Falling Off a Log)의이 장을 읽는 것이 좋습니다.

로깅 인프라를 직접 설치하는 것을 권장하지 않습니다. 유지해야 할 필요가없는 성숙한 무언가를 사용하고 대신 앱의 비즈니스 로직에 집중하는 이유는 무엇입니까?

관련 문제