로깅

IMKUNYOUNG·2023년 10월 24일
0

로깅

목록 보기
1/1
post-thumbnail

로깅

  • 로깅: 프로그램 동작시 발생하는 모든 일 (서비스 동작 상태, 장애)을 기록하는 행위
  • 서비스 동작 상태: 시스템 로딩, HTTP 통신, 트랜잭션, DB 요청, 의도를 가진 Exception
  • 장애: I/O Exception, NullPointException, 의도하지 않은 Exception..


로깅 프레임워크

  • SLF4J: 로깅 추상화 라이브러리
  • Logback: 로깅 프레임워크

로깅 프레임워크 vs System.out.println()

  • 로깅 프레임워크는 출력 형식을 지정할 수 있으며,
  • 로그 레벨에 따라 남기고 싶은 로그를 별도로 지정할 수 있음
  • 또한 콘솔뿐 아니라 파일이나 네트워크 등 로그를 별도의 위치에 남길 수 있음
package com.example.slf4jpoc;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Slf4jPocApplication {

    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            System.out.println("로깅 재밌어!");
            System.err.println("이건 에러야!");
        }

        Logger logger = LoggerFactory.getLogger(Slf4jPocApplication.class);

        for (int i  = 0; i < 3; i++) {
            logger.debug("이건 디버깅임! {}", i);
            logger.error("이건 에러임! {}", i);
            logger.info("이건 인포임! {}", i);
            logger.warn("이건 경고임! {}", i);
            logger.trace("이건 트레이스임! {}", i);
        }
    }

}



로그 레벨

레벨설명
Fatal매우 심각한 에러. 프로그램이 종료되는 경우가 많음
Error의도하지 않은 에러가 발생한 경우. 프로그램이 종료되진 않음
Warn에러가 될 수 있는 잠재적 가능성이 있는 경우
Info명확한 의도가 있는 에러. 요구사항에 따라 시스템 동작을 보여줄 때
DebugInfo 레벨보다 자세한 정보가 필요한 경우. Dev 환경
TraceDebug 레벨보다 자세함. Dev 환경에서 버그를 해결하기 위해 사용

예시) 회원가입 시, DB에 동일한 email을 가진 회원이 있을 때, DuplicationException을 던진다면 이 이벤트의 로그는 어떤 레벨을 적용할까?

정답: Info -> 개발자가 의도한 예외이기 때문



로깅 vs 디버깅

  • 프로그래밍의 절반은 디버깅
  • 디버깅을 할 수 없는 상황에서는 로깅이 최선의 선택
    (ex, 구동 중인 서버 환경에서,,)
  • 디버깅을 쓸 수 있다면 디버깅을 최대한 활용


SLF4J

  • Simple Logging Facade for Java
  • 다양한 로깅 프레임워크에 대한 추상화 (인터페이스) 역할
  • 따라서 단독으로 사용 불가능
  • 최종 사용자가 배포 시 원하는 구현체를 선택


SLF4J의 동작 과정

Bridge

  • 다른 로깅 API로의 Logger 호출을 SLF4J API로 연결
  • 이전의 레거시 로깅 프레임워크를 위한 라이브러리 여러 개 사용 가능
  • Binding 모듈에서 사용될 프레임워크와 달라야 함.

SLF4J API

  • 로깅에 대한 추상 레이어 (인터페이스) 제공
  • 하나의 API 모듈에 하나의 Binding 모듈


Logback

  • SLF4J의 구현체
  • Log4J를 토대로 만든 프레임워크


Logback 구조

logback-core

  • 다른 모듈을 위한 기반 역할을 하는 모듈
  • Appender와 Layout 인터페이스가 이 모듈에 해당함

logback-classic

  • logback-core를 가지며 SLF4J API를 구현함
  • Logger 클래스가 이 모듈에 속함

logback-access

  • Servlet Container와 통합되어 HTTP 액세스에 대한 로깅 기능을 제공
  • 웹 애플리케이션 레벨이 아닌 컨테이너 레벨에서 설치되어야 함


Logback - 설정 요소

Logger

  • 실제 로깅을 수행하는 구성 요소
  • 출력 레벨 조정 (TRACE < DEBUG < INFO < WARN < ERROR)
  • 기본 레벨은 Debug

Appender

  • 로그 메시지가 출력할 대상 결정
  • ConsoleAppender: 로그를 콘솔에 출력
  • FileAppender: 로그를 파일에 출력
  • RollingFileAppender: 파일을 일정 조건에 따라 따로 저장

Layout

  • Encoder(Layout) Appender에 포함
  • 사용자가 지정한 형식으로 표현될 로그 메시지를 변환하는 역할


실습 -요구사항

  • 테스트, 개발 환경에서는 Info 레벨 로그를 Console에다,
  • 프로덕션 환경에서는 Info Warn, Error 레벨 별 로그를 파일로 남겨주세요



0개의 댓글