.NET Window 애플리케이션에서 예상치 못한 오류를 수집/보고하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/110488

문제

나는 현재 우리가 다루고 있는 것보다 더 나은 해결책을 찾고 있습니다 예상치 못한 생산 오류, 바퀴를 재발명하지 않고.

우리 제품 중 상당수는 원격 사이트에 설치되는 WinForm 및 WPF 응용 프로그램입니다.NullReferenceExceptions부터 '일반 네트워크 오류'까지 예상치 못한 오류가 필연적으로 발생합니다.따라서 프로그래머 오류부터 환경 문제까지 다양합니다.

현재 처리되지 않은 모든 예외는 log4net을 사용하여 기록된 다음 이메일로 다시 전송됩니다. 분석.그러나 우리는 때때로 이러한 오류 '보고서'에 문제를 식별하기에는 정보가 너무 적다는 사실을 발견했습니다.

이 보고서에는 다음과 같은 정보가 필요합니다.

  1. 애플리케이션 이름
  2. 애플리케이션 버전
  3. 워크스테이션
  4. 어쩌면 스크린샷일지도
  5. 예외 세부정보
  6. 운영 체제
  7. 사용 가능한 RAM
  8. 실행 중인 프로세스
  9. 등등...

나는 이것을 처음부터 개발하여 바퀴를 다시 발명하고 싶지 않습니다.필요한 구성 요소:

  1. 오류 수집(상세 내용은 위에서 언급)
  2. '발신자' 오류(DB나 인터넷이 불가능한 경우 큐잉 필요)
  3. 오류 데이터베이스
  4. 이러한 오류를 분석하고 보고합니다.예:가장 자주 발생하는 오류 또는 시간 초과 10개는 오후 4시부터 오후 5시 사이에 발생합니다.버전 x와 y의 오류를 어떻게 비교하나요?

메모:우리는 보았다 스마트어셈블리 가능한 해결책으로 제시되었지만 비록 가깝기는 했지만 우리의 요구 사항을 완전히 충족시키지는 못했고 다른 개발자들이 어떻게 하는지, 그리고 몇 가지 대안이 있는지 듣고 싶었습니다.

편집하다: 지금까지 답변해 주셔서 감사합니다.어쩌면 원래 질문에서 명확하지 않았을 수도 있습니다. 문제는 처리되지 않은 모든 예외를 잡는 방법이 아니라 이를 처리하고 주변에 보고 엔진(분석)을 만드는 방법입니다.

도움이 되었습니까?

해결책

나는 Jeff Atwood의 기사를 제안하고 싶습니다. 사용자 친화적인 예외 처리, 이미 요청한 대부분의 작업(애플리케이션 정보, 스크린샷, 예외 세부 정보, OS, 텍스트 파일 로깅 및 이메일 보내기)을 수행하고 소스 코드가 포함되어 있어 필요한 추가 항목을 추가할 수 있습니다.

다른 팁

처리되지 않은 예외 이벤트에 연결하여 이를 기록하거나 웹 서비스에 접속할 수 있습니다.

[STAThread]
static void Main() 
{
    Application.ThreadException += new ThreadExceptionEventHandler(OnUnhandledException);
    Application.Run(new FormStartUp());
}
static void OnUnhandledException(object sender, ThreadExceptionEventArgs t) 
{
    // Log
}

또한 ThreadException 대신 AppDomain을 사용하여 이 코드 조각을 찾았습니다.

static class EntryPoint {
    [MTAThread]
    static void Main() {
        // Add Global Exception Handler
        AppDomain.CurrentDomain.UnhandledException += 
            new UnhandledExceptionEventHandler(OnUnhandledException);

        Application.Run(new Form1());
    }

    // In CF case only, ALL unhandled exceptions come here
    private static void OnUnhandledException(Object sender, 
        UnhandledExceptionEventArgs e) {
        Exception ex = e.ExceptionObject as Exception;
        if (ex != null) {
            // Can't imagine e.IsTerminating ever being false
            // or e.ExceptionObject not being an Exception
            SomeClass.SomeStaticHandlingMethod(ex, e.IsTerminating);
        }
    }
}

이에 대한 몇 가지 문서는 다음과 같습니다. AppDomain 처리되지 않은 예외

직접 처리하는 것 외에 재사용 가능한 일반적인 방법은 없으며 실제로 애플리케이션의 인터페이스와 적절하게 통합되어야 하지만 애플리케이션 이름, 예외 및 모든 좋은 기능을 갖추고 모든 앱을 중앙 집중식으로 관리할 수 있습니다.

JetBrain에 내장된 오류 보고 기능을 연구해 보세요. 오메아 리더.예상치 못한 오류가 발생할 때 대화 상자를 표시하는 포괄적인 오류 처리 구성 요소가 있습니다.사용자는 JetBrain의 공개 오류 수집 웹 서비스에 문제를 제출하기 전에 더 자세한 내용을 입력할 수 있습니다.

그들은 커뮤니티가 .NET 1.1 코드 기반을 v2 또는 3으로 업그레이드할 수 있도록 Omea 오픈 소스를 만들었습니다.http://www.jetbrains.net/confluence/display/OMEA/this+link

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top