로그 레벨은 어떻게 정하시나요?

leafriend의 이미지

저는 주로 자바로 개발을 하는지라 로깅을 위해 아파치 커먼스 로깅 + Log4J를 사용하고 있습니다.

여기서 지원하는 로그 레벨은 Fatal, Error, Warn, Info, Debug, Trace(+ Off, All)인데요, 각각 수준에 대한 설명이 너무 추상적이라 코딩을 할 때 이걸 어느 수준으로 해야할 지 좀 애매하네요.

FATAL
The FATAL level designates very severe error events that will presumably lead the application to abort.
ERROR
The ERROR level designates error events that might still allow the application to continue running.
WARN
The WARN level designates potentially harmful situations.
INFO
The INFO level designates informational messages that highlight the progress of the application at coarse-grained level.
DEBUG
The DEBUG Level designates fine-grained informational events that are most useful to debug an application.
TRACE
The TRACE Level designates finer-grained informational events than the DEBUG

Fatal은 시스템이 뻗을 수 밖에 없는 경우라 확실히 구분이 되는데요, Error 아래부터는 위, 아래 수준과 구분이 애매하네요. 저는 일단 다음과 구분하고 있습니다.

FATAL
시스템이 더 이상 유지될 수 없을 때, 즉 뻗기 직전에.
ERROR
뻗을 정도는 아니지면 분명한 문제가 발생했을 때.
WARN
자체적으로 해결할 수 있으나 그래도 잘못된 경우 - 예를 들어 형식이 잘못된 입력값(날짜를 입력할 때 yyyy-MM-dd인데 2010-1-21로 입력한다든지)
INFO
특정한 이벤트 포인트. 긴 시간이 걸리는 작업(DB 동기화 등)이 시작되거나 종료될 때.
DEBUG
메서드의 시작과 끝.
TRACE
메서드의 시작과 끝 이외에 본문 중에서 디버깅에 필요한 정보를 출력할 때.

이렇게 하고는 있는데 실제로 다른 분들은 어떻게 하시는지 궁금하네요.

M.W.Park의 이미지

그냥 verbose level이라고 생각하면 편합니다.

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

이응준의 이미지

이렇게 하고 있습니다. (PHP 개발자입니다)

FATAL
    비정상적인 상황을 만남. 치명적이므로 작업을 중단함
ERROR
    비정상적인 상황을 만남. 치명적이지 않아 작업을 중단하지 않았으나, 부분적으로 오동작했을 가능성이 있음
WARNING
    비정상적인 상황을 만남. 복원하여 정상 진행함
NOTICE
    오동작이 유발될 가능성을 발견함 (assertion이 FALSE인 경우 등)
INFO
    개발/운영에 도움을 주기 위한 정보
creativeidler의 이미지

이런 말이 있죠.

에러 로그의 목적은 에러 로그를 제거하는 것이다.

그 목적을 달성할 수 있다면야 로그 레벨 같은 건 아무렇게나 해도 별 상관 없습니다. 대개 로그를 필터링하는 조건에 맞추기만 하면 되죠.

물론, 다른 개발자가 써야 하는 라이브러리나 플랫폼을 만든다면 또 이야기가 다르겠지만요.