앞 장에서는 사용자가 직접 정의한 내용을 로그로 남기는 방식을 다뤘습니다. 사실 Log4net은 예외 정보와 스택 추적 내용까지 기록할 수 있어 개발자가 문제를 파악하기 편리합니다.
try
{
int b = 0;
int a = 100 / b;
}
catch (Exception ex)
{
log.Error(ex.Message, ex);
}Code language: PHP (php)
- 예외 발생:
100 / b,변수b=0이므로DivideByZeroException0으로 나누기 예외가 발생합니다. - 예외 처리:
catch (Exception ex)는Exception을 상속받은 모든 예외를 잡아냅니다. - 로그 작성 핵심 패턴:
log.Error(ex.Message, ex);- 첫 번째 매개변수:커스텀 로그 메시지(여기서는 예외 요약 메시지
ex.Message를 전달) - 두 번째 매개변수에는 반드시 예외 객체
ex를 넘겨야 합니다 - log4net은 두 번째 인자가
Exception인스턴스임을 감지하면 전체 스택 추적(StackTrace)을 자동으로 출력하며 오류 위치와 호출 체인을 기록합니다.
- 첫 번째 매개변수:커스텀 로그 메시지(여기서는 예외 요약 메시지
잘못된 작성법(스택 정보가 출력되지 않음)
// 문자열만 넘기면 스택 정보가 유실됨
log.Error(ex.ToString());
log.Error(ex.Message);Code language: JavaScript (javascript)
이 방식은 예외 텍스트만 출력될 뿐 일부 로그 포맷에서는 호출 스택을 자동으로 보여주지 않아 문제 분석이 어려워집니다.
권장 표준 작성법
// 권장:업무 상황 설명을 추가한 뒤 예외 객체 전달
log.Error("나눗셈 연산 처리 중 오류가 발생했습니다", ex);Code language: JavaScript (javascript)
예외 정보 기록
Previous: 별도 설정 파일