2010-01-25 5 views
1

Log4Net을 사용하여 데이터베이스에 예외를 기록 할 수 있다는 것을 알고 있습니다. 그러나 에 대해 에 대해 저장하는 내용을 다른 열로 구분합니다.Log4Net 로깅 예외

누군가가이 작업을 수행했거나 수동으로 예외를 데이터베이스에 수동으로 기록하는 것이 쉬운 경우 누구에게 알 수 있습니까?

건배 앤서니

UPDATE :

은 어쩌면 사용하는 데 도움이 경우 다음이 사용할 수있는 경우

  • 는 아는 사람 있나요?
    • 이 은 내가 세부 사항의 일종 후 :
      • 예외 유형
      • ExceptionMessage
      • ExceptionSource
      • ExceptionTargetSite
      • ExceptionStackTrace
  • 누구든지 이것을 했습니까?
  • 예외를 데이터베이스에 수동으로 기록하는 것이 더 쉽습니다.

아마도 형식이 변경되면 도움이 될 것입니다.

+2

진지하게, 무엇을 찾고 계십니까? Custom Appender가 너무 어렵지 만 AdoNet appender가 충분히 세밀하지 않은 경우 원하는 것은 무엇입니까? 어떤 데이터로 탈출하고 싶습니까? 예외 유형 또는 메시지의 내용을 기반으로합니까? AdoNetAppender의 자체 수정 버전을 구현할 때 어떤 문제가 있습니까? –

+0

"데이터베이스에 수동으로 예외를 기록하는 것이 더 쉬울까요?" 평균? –

답변

2

요청으로, 당신이 할 수있는 여기에 설명 된 방법을 사용 :

public void LogDetailedException (LogLevel level, string message, Exception exception) 
{ 
    log4net.ThreadContext.Properties["exceptionType"] = exception.GetType().AssemblyQualifiedName; 
    // appropriate logging statement 
    log4net.ThreadContent.Properties.Remove("exceptionType"); // clear it, so it's not used in future calls 
} 

그리고 t : Log4Net available database fields for adoappender - seems there are a few more i.e. method_name?는 아마도 다음과 같이 뭔가 예외에 대한 이러한 추가 정보를 저장하는 log4net ThreadContext에 사용자 지정 속성을 사용하는 방법 당신의 패턴 암탉 :

<conversionPattern value="%property{exceptionType}" /> 

그것의 가치가 테스트 /이 스레드 안전 (이름이 있음을 의미하는 것입니다,하지만이 확인 다치게 할 수 없어) 있는지 확인하기 위해 연구. 또한 후속 로그에 메시지에이 데이터가 포함되지 않도록해야합니다 (즉, 메시지가 삭제되었는지 확인해야합니다).

(위키는 특별히 대답하지 않았으므로 Mitch's 답변에 대한 다양한 정보와 토론을 수집했습니다.)

+0

고마워. 정말 감사. 내 질문에 대한 이것은 최고의 답변이지만, 아마도 내 오류 처리 및 EL4 Logged –

-1

AdoNetAppender Class을 사용하거나 필요에 맞지 않는 문자는 custom Appender으로 작성하십시오.

+2

왜 이것을 다운 그레이드하겠습니까? AdoNetAppender를 사용하면 작업을 중단시킬 수 있으며 더 세분화가 필요한 경우 사용자 정의 appender에 대한 조언을 따를 수도 있습니다. –

+2

AdoNetAppender 클래스는 예외 세부 사항을 추출하지 않습니다. 제네릭 응답 "사용자 정의 Appender"정말 질문에 대답 도움이되지 않습니다. –

+0

@Sam 감사합니다. 내 생각은 정확히 –

2

당신은 (는 인프라 용으로 만 표시되어 있으므로 사기) 닷지 방법은 Page.ProcessRequest를 재정 의하여 모든 예외를 잡기 수도, ELMAH 같은 것을 사용하지 않을 경우

public override void ProcessRequest(HttpContext context) 
{ 
    try 
    { 
     base.ProcessRequest(context); 
    } 
    catch (Exception e) 
    { 
     log.ErrorFormat(e.Message); // Log exception message, or 
     log.ErrorFormat(e.ToString()); // Log stack trace 
     throw; 
    } 
} 
+0

감사합니다. Si ... 이것은 정말 흥미 롭습니다. 전 ELMAH에 대해 들어 보지 못했습니다. Log4Net에 내 로깅이 아닌 내 예외 로깅을 수행하려고했습니다.그러나 ELMAH는 갈 길일 수 있습니다. –

2

ELMAH는 (는) 훌륭한 선택입니다. 잘 알려지지 않은 라이브러리는 CuttingEdge.Logging입니다.ELMAH와 마찬가지로 예외 유형, 메시지 및 스택 추적을 데이터베이스의 테이블에 로깅 할 수 있습니다.