[Spring] 운영 환경에서의 로그 모니터링 레벨 구분

2025. 2. 7. 10:23·⚙ Framework/Spring-스프링
728x90
728x90

모든 시스템은 추적을 위해 로깅이 필요하다.

 

일반적으로 개발 환경에서는 DEBUG, 운영 환경에서는 INFO 레벨로 사용한다.

 

 

로그 레벨

TRACE > DEBUG > INFO > WARN > ERROR > FATAL

 

로그 레벨 설정 시 TRACE로 설정하면 TRACE 이상 등급의 모든 로그 표시, INFO 설정 시 INFO 이상 로그가 출력된다.

  • TRACE : 모든 레벨에 대한 로그 추적
  • DEBUG : 개발 단계에서 사용, 주로 SQL 확인
  • INFO : 운영에 참고될 수 있는 데이터나 애플리케이션 흐름 확인
  • WARN : 로직 상 유효성 확인, 예상 가능한 문제로 인한 예외 처리
  • ERROR : 예상하지 못한 심각한 문제가 발생하는 경우

 

로그 포맷

# Logback 포맷
14:18:17.635 [Name Of Thread] INFO c.e.NameOfLogger - Log message

# java.util.logging 포맷
July 29, 2022 2:36:11 PM com.exmaple.NameOfLogger nameOfMethod
INFO : Log message

# Log4j 포맷
2022-07-29 11:36:02,651 [Name Of Thread] INFO com.example.NameOfLogger - message

 

java.util.logging은 성능이 가장 나쁘고, Logback이 제일 빠르다고 함.

 

GitHub - stephenc/java-logging-benchmarks: JMH based benchmarks of different Java Logging frameworks

JMH based benchmarks of different Java Logging frameworks - stephenc/java-logging-benchmarks

github.com

 

 

TRACE

가장 상세한 로그 레벨로, 실행 흐름과 디버깅 정보를 상세히 기록하여 디버깅 과정에서 사용한다.

 

 

DEBUG

개발 혹은 테스트 단계에서 해당 기능이 올바르게 동작하는지 확인하기 위한 로그 레벨이다.

  • DB 연결, SQL 쿼리, 함수 호출에 사용된 인자, 반환 값 등을 남겨 문제 추적 및 해결에 도움을 준다.
    • 애플리케이션의 내부 동작을 이해하고 문제를 분석하기 위해 사용!

인텔리제이같은 IDE의 디버거 성능이 좋아지면서 로컬 개발 단계에서 DEBUG 단계 로깅을 활용할 일이 잘 없지만, DEV/QA 환경에서의 문제를 파악할 때 사용하면 좋다.

  • 개발 환경에서만 사용하며, 운영 환경에서 남기고 싶지 않은 로그 메시지를 기록한다.

 

INFO

정보성 메시지로 애플리케이션의 정상 작동 정보, 일의 발생을 나타내는 표준 로그 레벨이다.

  • 주요 이벤트나 실행 상태, 외부 리소스와의 상호 작용 등에 대한 정보를 전달한다.
    • 인증 API의 백엔드에서 인증 성공 여부에 따라 사용자가 인증을 요청한 정보 등을 INFO 로그로 남김
    • 애플리케이션의 시작/종료 시점, 중요한 작업(배치 등)의 실행/완료 시점 등을 INFO 로그로 남김
  • 운영 환경에서도 사용 가능하며, 시스템을 파악하는 데 유익한 정보만 남겨야 한다.

 

WARN

애플리케이션에서 잠재적으로 문제가 될 수 있는 상황일 때 남기는 로그 레벨로, 사용자의 오입력으로 인한 오류 발생 등 언제든 발생할 수 있는, 예측 가능한 일반적인 문제 상황에 주로 사용한다.

  • 유효하지 않은 입력, 예상치 못한 입력, 리소스 제한 등 사용자 측면의 오류를 WARN 로그로 남김
  • 운영 환경에서도 사용 가능하며, 개발자가 조치를 취할 수 있도록 주의를 기울일 필요가 있는 상황을 나타냄

 

ERROR

애플리케이션에서 발생한 심각한 오류나 예외 상황을 나타내는 로그 레벨로, 기능 자체가 제대로 작동하지 못하는 문제일 때, 즉시 조치가 필요한 상황일 때 사용한다.

  • 운영 환경에서도 사용 가능하며, DB 연결 실패 등 즉시 조치해야 하는 문제에 사용한다.
    • WARN 상황에서 특정 기준치를 넘기는 경우 ERROR로 변경하여 WARN-ERROR를 구분하는 것도 좋다.

 

 

[주의]

로그 출력 레벨이 INFO 이상인 경우, DEBUG 로그는 출력되지 않으나 아래 예시에서 +를 사용하면 실제로는 문자열 더하기 연산이 실행된다고 한다. {}를 사용하여야 불필요한 연산이 발생하지 않게 됨

# 연산 발생
log.debug("data = " + data)

# 연산 미발생
log.debug("data={}", data)

 

728x90
320x100
저작자표시 비영리 변경금지 (새창열림)

'⚙ Framework > Spring-스프링' 카테고리의 다른 글

[E] Cannot construct instance of ~ xxxDTO (no Creators, like default constructor, exist): cannot deserialize from Object value  (0) 2025.04.18
[Spring] JPA Enum Converter로 DB Entity Mapping하기  (0) 2025.03.25
[Spring] 스프링 부트(Spring Boot) 프로젝트 생성  (0) 2024.12.01
[E] No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.1.4 was found.  (0) 2023.10.16
[Java] Spring이란? (2) - Spring의 주요 특징  (0) 2023.08.03
'⚙ Framework/Spring-스프링' 카테고리의 다른 글
  • [E] Cannot construct instance of ~ xxxDTO (no Creators, like default constructor, exist): cannot deserialize from Object value
  • [Spring] JPA Enum Converter로 DB Entity Mapping하기
  • [Spring] 스프링 부트(Spring Boot) 프로젝트 생성
  • [E] No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.1.4 was found.
mxnxeonx
mxnxeonx
"아, 이거 뭐였더라"를 하지 않기위한 일기장.
  • mxnxeonx
    MJ's Development Diary
    mxnxeonx
  • 전체
    오늘
    어제
    • 분류 전체보기 (154)
      • 💻 Language (43)
        • Java : 자바 (18)
        • Python : 파이썬 (9)
        • ROS : 로봇시스템 (9)
        • Android : 안드로이드 (4)
        • JavaScript : 자바스크립트 (2)
      • 🌐 Environment (19)
        • IDE : 통합개발환경 (9)
        • Virtual : 가상환경 (10)
      • ⚙ Framework (12)
        • Vue-뷰 (3)
        • Spring-스프링 (7)
      • 💾 DataBase (18)
      • 🌌 OS (36)
        • Linux-리눅스 (36)
      • 💬 CI · CD (7)
        • Git : 깃 (7)
      • 📃 ETC (3)
      • 🤖 AI (4)
  • 링크

    • GitHub
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
mxnxeonx
[Spring] 운영 환경에서의 로그 모니터링 레벨 구분
상단으로

티스토리툴바