로깅 레벨 (Logging Level)

한눈에 보기

로깅 레벨은 로그의 심각도를 단계로 나누어 상황에 따라 기록 범위를 걸러 내는 기준이다. TRACE부터 FATAL까지 각 레벨의 용도와 선택 기준, 구조화 로깅과 운영 환경의 로그 관리 방법을 정리한다.

최종 업데이트 2026.09.17

로깅 레벨(Logging Level)은 로그 메시지의 심각도와 중요도를 단계로 나누어, 상황에 따라 어떤 메시지까지 기록할지 걸러 내는 기준이다. 일반적으로 TRACE, DEBUG, INFO, WARN, ERROR, FATAL의 순서로 심각도가 높아지며, 설정된 레벨 이상의 메시지만 출력된다. 레벨을 일관된 기준으로 나누어 쓰면 개발 중에는 상세한 흐름을 보고, 운영 환경에서는 소음 없이 의미 있는 신호만 남길 수 있다.

레벨 체계와 필터링 원리

로깅 프레임워크는 각 레벨에 내부적으로 숫자 우선순위를 부여한다. 로거(Logger)에 INFO 레벨을 설정하면 INFO, WARN, ERROR, FATAL은 기록되고 TRACE와 DEBUG는 버려진다. 이 필터링은 코드 수정 없이 설정만으로 바꿀 수 있다는 점이 핵심이다. 개발 환경에서는 DEBUG로 상세히 보다가 운영 환경에서는 INFO나 WARN으로 올리고, 장애 조사 때만 특정 패키지의 레벨을 일시적으로 낮추는 식으로 운영한다. 자바(Java) 진영의 SLF4J와 로그백(Logback), 파이썬(Python)의 logging 모듈, 자바스크립트(JavaScript)의 윈스턴(Winston)과 피노(Pino) 등 대부분의 로깅 도구가 같은 레벨 개념을 공유한다. 도구마다 세부 명칭은 다른데, 파이썬은 FATAL 대신 CRITICAL을 쓰고 TRACE가 없으며, 일부 도구는 WARN을 WARNING으로 표기한다.

레벨별 용도

레벨의미기록할 내용의 예운영 환경 출력
TRACE가장 상세한 실행 추적반복문 내부 값, 함수 진입과 반환끔
DEBUG개발과 디버깅용 정보쿼리 내용, 분기 판단 근거, 외부 응답 요약끔
INFO정상적인 주요 이벤트서버 기동, 주문 완료, 배치 작업 시작과 종료켬
WARN당장 실패는 아니지만 주의할 상황재시도 발생, 폐기 예정 API 호출, 자원 사용량 임계 접근켬
ERROR기능 하나가 실패한 오류처리되지 않은 예외, 외부 연동 실패, 결제 실패켬, 알림 연동
FATAL프로세스를 지속할 수 없는 치명적 오류필수 설정 없음, 기동 불가, 데이터 손상 감지켬, 즉시 알림

레벨 선택의 실용적 기준은 이 메시지를 보고 누가 무엇을 해야 하는가이다. ERROR는 누군가 확인하고 조치해야 하는 일에만 써야 한다. 사용자의 잘못된 입력처럼 예상된 실패까지 ERROR로 남기면 알림이 소음이 되어 정작 중요한 오류가 묻힌다. 반대로 실제 장애 상황을 INFO로 남기면 모니터링이 감지하지 못한다. WARN은 지금은 견뎠지만 방치하면 ERROR가 될 일, 예를 들어 커넥션 풀 고갈 임박 같은 조기 경보에 적합하다.

좋은 로그 메시지 작성법

레벨만큼 중요한 것이 메시지의 내용과 형태다. 무엇이, 어떤 맥락에서, 어떤 값으로 일어났는지가 담겨야 나중에 검색하고 집계할 수 있다. 최근 표준은 사람이 읽는 문장 대신 키와 값 쌍으로 남기는 구조화 로깅(Structured Logging)이다. JSON 형태로 남기면 로그 수집 시스템에서 필드 단위 검색과 통계가 가능해진다.

{"level":"ERROR","ts":"2026-08-17T09:12:33Z","logger":"payment",
 "msg":"결제 승인 실패","orderId":"ord-1042","pgCode":"E4012",
 "elapsedMs":1830,"traceId":"7f3a9c"}

여기에 요청 단위 식별자인 트레이스 아이디(Trace ID)를 모든 로그에 함께 남기면, 마이크로서비스 여러 개를 거친 한 요청의 흐름을 이어서 추적할 수 있다. 주의할 점도 있다. 비밀번호, 토큰, 주민등록번호 같은 민감 정보는 어떤 레벨에서도 남기지 않아야 하며, 필요한 경우 마스킹(Masking)을 거친다. 또 비활성 레벨이라도 메시지 조립 비용은 발생할 수 있으므로, 문자열 연결 대신 지연 평가되는 자리 표시자 방식을 쓰는 것이 성능상 안전하다.

운영 환경에서의 로그 관리

운영 로그는 파일에 쌓아 두는 것으로 끝나지 않는다. 여러 서버의 로그를 한곳에 모으는 중앙 집중화가 기본이며, 일래스틱서치(Elasticsearch) 기반 스택이나 로키(Loki), 클라우드 관리형 서비스가 흔히 쓰인다. 디스크가 로그로 가득 차는 사고를 막기 위해 날짜나 크기 기준으로 파일을 교체하고 오래된 것을 지우는 로테이션(Rotation) 정책을 두고, 법적 요건과 비용을 고려한 보존 기간을 정한다. 트래픽이 많은 서비스에서는 DEBUG 로그의 양 자체가 성능과 비용 문제를 일으키므로, 전체 요청 중 일부만 상세히 남기는 샘플링(Sampling)이나 운영 중 특정 로거만 레벨을 바꾸는 동적 레벨 조정을 활용한다. 마지막으로 ERROR 이상 레벨은 로그로 남기는 데서 그치지 않고 알림 시스템과 연동해, 로그가 관측 가능성(Observability)의 한 축으로 기능하게 만드는 것이 실무의 완성형이다.

면접에서 이렇게 물어본다

  • 로깅 레벨의 종류와 각 레벨의 사용 기준을 예를 들어 설명해 보라.
  • 운영 환경에서 DEBUG 로그를 끄는 이유와, 장애 조사 시의 대안을 말해 보라.
  • WARN과 ERROR를 나누는 자신만의 기준은 무엇인가.
  • 구조화 로깅이 무엇이고 왜 필요한지 설명해 보라.
  • 마이크로서비스 환경에서 하나의 요청을 로그로 추적하려면 무엇이 필요한가.
웹 문서 전체 보기

이 개념, 내 코드에서는 어떻게 물어볼까요

데브핏(DevFit)에 채용공고 URL을 붙여 넣고 레포지토리를 연결하면, 내가 쓴 커밋에서 예상 질문과 어필 포인트를 만듭니다. 하루 10회까지 무료입니다. 합불 판정이나 지원자 랭킹은 만들지 않고, 최종 판단은 사람이 합니다.

공고 넣고 시작하기