오류 로깅이 실패하면 어떻게합니까? 생산에서 작동하는 것을 어떻게 테스트합니까?

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

문제

  1. 오류 로깅 코드가 실패하면 어떻게합니까?
  2. 현재 작동하는지 확인하려면 어떻게해야합니까?
  3. 작동하지 않는지 어떻게 알 수 있습니까?
  4. 생산 환경에서 작동한다는 것을 어떻게 테스트합니까?
  5. 다른 모든 것이 실패하면 예외를 던져야합니까?

아래 코드는 Microsoft의 엔터프라이즈 라이브러리 로깅 응용 프로그램 블록을 사용합니다. 어떻게 "더 나은"만드는가?

using Microsoft.Practices.EnterpriseLibrary.Logging;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // Trying to write some data to the DB
            ...
        }
        catch (Exception ex)
        {
            LogHelper.LogException(ex, "Trying to write to the DB");
        }
    }
}

public class LogHelper
{
    public static void LogException(Exception ex, string exceptionType)
    {
        try
        {
            // Simplified version, only logging the message
            Logger.Write(exceptionType);
        }
        catch
        {
            // What do you do here???
        }
    }
}
도움이 되었습니까?

해결책

내 답변을 참조하십시오 관련 질문:

다른 모든 것이 실패하면 캐치 블록에 '최후의 수단 로깅'이 있습니다. 실패 할 가능성이 거의없는 위치의 텍스트 파일에 예외를 기록하십시오. 이 최후의리스트 로깅이 또 다른 예외를 던지면 실패하면 해당 예외를 삼키거나 앱을 종료하고 오류를 메시지 상자로 표시 할 수 있습니다.

이 구체적인 (예외적 인) 사례에서는 예외를 삼키는 것이 앱을 종료하지 않는 유일한 방법입니다.

다른 팁

내 앱은 일반적으로 오류로 두 가지를 수행합니다. 첫 번째는 로컬 로그 파일에 작성하는 것입니다 (일부 유형의 데이터베이스 로깅을 사용하더라도). 그런 다음 오류의 이메일을 지원을 위해 설정 한 배포 목록에 보냅니다.

따라서 데이터베이스 로그가 실패하면 오류는 여전히 로컬 로그 파일에 있으며 이메일을 통해 전송됩니다.

이메일이 실패하면 오류가 여전히 기록되어 있으므로 나중에 문제를 해결할 수 있습니다.

그보다 더 내성을 높이는 것은 매우 미션 크리티컬 응용 프로그램 인 IMHO에 대한 노력에만 가치가 있습니다.

로그 파일을 작성하고 절대 사라지지 않을 공통 주소로 이메일을 전송합니다. 방탄도 아니지만 메일 시스템이 다운되거나 이메일 서버가 변경되면 우리는 그것에 대해 알게 될 것이라고 생각합니다. 데이터베이스와 플랫 파일 모두에 쓰고 이메일을 보내는 앱이 있습니다. 그래서 3 개 중 하나가 작동합니다. 내 앱 중 하나가 로그를 위해 DB에 글을 쓰는 것임을 알았고 캐치에서 동일한 DB에 글을 쓰는 것이었고 DB 연결의 약간의 변경으로 인해 앱이 실패하는 것임을 발견 한 유일한 방법입니다. 캐치 문에서 DB 대신 이메일을 수행하는 것을 수정했습니다. 플랫 파일에서 가지고있는 유일한 문제는 파일 시스템 저장소입니다. 로그 용 플랫 파일을 작성하는 많은 응용 프로그램이있어서 지속적으로 백업하고 저장하거나 평범한 삭제를합니다.

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