2011-02-04 3 views
1

안녕하세요 사용자 정의 예외를 로그 파일에 쓰고 싶습니다. 그래서 내 예외를 던지기 대신 그 메시지를 txt 파일에 기록하고 싶습니다.사용자 정의 예외 로깅 C#

내 예외의 생성자는 다음과 같습니다

try 
{ 
    string data = Read(txtLocation.Text); 
    txtInfo.Text = data; 

} 
catch (Exception ex) 
{ 

    WriteLog("[" + DateTime.Now + "]" + " " + ex.Message); 
    MessageBox.Show(" ");  
    throw new OpenFileException(txtLocation.Text, ex);     
} 

그래서 내가 부탁 해요 무엇 :

public OpenFileException(string pathToOpen, Exception innerexception) 
    : base("Couldn't find the path: " + pathToOpen, innerexception) 
{ 
    this.pathToOpen = pathToOpen; 
} 

이 나는 ​​순간에 내 예외를 기록하고 방법이다. 어떻게하면 txt 파일에 "경로를 찾을 수 없습니까?"라는 문자열을 기록 할 수 있습니까?

답변

0

나는 일반적으로 잡아 다르게

+0

Thx djeeg, 내가하고 싶은 걸 먹었어. –

0

조금 지나치게 보이지만 Log4Net을 사용하여 app.config의 구성에 따라 파일을 작성하거나 이메일을 보내지 않는 이유는 무엇입니까?

기본적으로 모든 노력을 기울여 원하는 것을 얻을 수 있습니다. 그런 다음 가장 중요한 것에 집중할 수 있습니다.

현재 논리를 유지하기로 결정하더라도 어쨌든 응용 프로그램의 모든 단일 catch 블록에서 DateTime.Now 및 기타 마법을 지정하는 대신 모든 작업을 수행하는 Logger 클래스를 만듭니다.

+0

Log4net은 사용법을 배우고 싶기 때문에 사용하지 않습니다. :) 이것이 내가 이것을 쓰려고하는 이유입니다. 로거 클래스를 만들려고하지만 내 사용자 정의 예외에서 문자열을 어떻게 로그합니까? –

0

를 처리 할 수 ​​있도록 사용자 정의 예외를 작성하는

try { 
    try { 
     string data = Read(txtLocation.Text); 
     txtInfo.Text = data; 
    } catch (Exception ex) { 
     throw new OpenFileException(txtLocation.Text, ex); 
    } 

     .... 

} catch(OpenFileException ex) { 
    WriteLog("[" + DateTime.Now + "]" + " " + ex.Message); 
    MessageBox.Show(" "); 
} catch(Exception ex) { 
    WriteLog("[" + DateTime.Now + "]" + " " + ex.Message); 
    MessageBox.Show(" "); 
} 

당신은 방법을 찾을 필요가 정상적인 시도/캐치 외부 사용자 정의 예외를 기록 할 것 파일을 찾을 수 없을 때 던져 질 예외를 얻는다.

파일을 찾을 수 없을 때 .NET에서 이미 FileNotFoundException을 발생시키기 때문에이 방법은 좋은 생각이라고 생각하지 않습니다. 당신은 그것을 잡아서 그런 식으로 메시지를 기록해야합니다.

try 
{ 
    string data = Read(txtLocation.Text); 
    txtInfo.Text = data; 

} 
catch (FileNotFoundException ex) 
{ 
    string log = String.Format("[{0}] Couldn't find the path: {1}" 
           , DateTime.Now 
           , ex.FileName); 
    WriteLog(log); 
} 

이미 존재하는 경우 새로운 예외 유형을 지정하지 마십시오.

는 프레임 워크 종로 가이드 라인에서

+0

그래, 너 말이 맞아. 시간 낭비 .NET에있는 예외를 만듭니다.그냥 시도하고 싶어, 내 자신에 의해 예외를 만들기 위해, 그게 뭔지, 나올 수 있었다 :) –

+0

@ 케네스 안데르센 : 충분히 공정. 나는 이것이 실험이라는 것을 깨닫지 못했다. –

+0

어떤 파일이 열리지 않았 는가에 따라 의도 된 행동 방침이 달라지는 경우 다양한 파일을 열지 못함에 대한 사용자 정의 예외를 갖는 것이 좋습니다. 예를 들어 미디어 파일을 여는 경우 CODEC도로드해야한다고 가정합니다. 두 파일 열기 시도가 실패하면 FileNotFoundException을 던지는 것이 도움이되거나 도움이되지 않습니까? 하나의 보고서 MediaFileOpeningException과 다른 CodecLoadingException을 갖는 것이 어느 정도 도움이 될까요? – supercat

0

(내 형식의 특이성을 용서) :

당신의 예외가 추가 속성을 제공 할 때 toString를 오버라이드 (override)를 수행합니다.

그러면 log.Error(exception)으로 전화하면 추가 작업없이 ToString()과 같은 방식으로 기록됩니다.