Spring - Logging

주빈·2022년 7월 14일
0

framework

목록 보기
9/11
post-thumbnail

📘 Logging이란?

로그(log)는 두가지 의미를 갖는다.

  • 사전적 의미 : 통나무, 향해 일지, 배의 속력이나 항주한 거리를 계측하는 장치의 총칭
  • 실질적 의미 : 기록을 남기는 것

📜 로그를 사용하는 이유

  • 애플리케이션을 운영할 때 로그의 효율적인 관리가 가능하다. (콘솔 또는 특정 파일)
  • 콘솔 로그를 위해서 System.out.print를 사용하는 것은 성능 저하를 야기한다.
    pom.xml에 자동으로 slf4j 라이브러리가 추가되어 있다.

📜 로그의 장단점

✏ 장점

  • 프로그램의 문제 파악에 용이하다.
  • 빠르고 효율적인 디버깅이 가능하다.
  • 수행내역 파악이 쉽다.
  • 로그 이력을 파일, DB 등으로 남길 수 있다.

✏ 단점

  • 로그에 대한 디바이스(파일) 입출력으로 인해 런타임 오버헤드가 발생한다.
  • 로깅을 위한 추가 코드로 인해서 전체 코드 사이즈가 증가한다.
  • 심하게 생성되는 로그는 혼란을 야기하거나 애플리케이션 성능에 영향을 미친다.
  • 개발 중간에 로깅 코드를 추가하기 어렵다.

📜 Logging Framework (log4j / logback / slf4j)

  • 스프링 프로젝트에는 기본적으로 log4j 라이브러리가 추가되어있고 log4j와 관련된 설정을 담은 log4j.xml 파일을 서버 구동과 동시에 로딩하게 되어 있다.

  ✅ 하지만 log4j를 이용하여 많은 양의 로그를 출력하는 경우에 성능 저하가 심해져서 최근에는 logback 이라는 라이브러리를 사용한다. (10배 빠른 속도)

  • 스프링 프로젝트에서 기존에 사용하던 log4j를 새로운 logback으로 변경해야 하는데 이를 일일이 변경하기엔 비효율적이므로
    log4j < - > logback 으로 서로 변환해줄 수 있는 slf4j 라이브러리가 존재한다.
    (STS 사용 시 pom.xml에 자동으로 slf4j 라이브러리가 추가되어 있다.

      ⏩ pom.xml에 <!- Logging 부분

  • slf4j(Simple Logging Facade for Java)란 Facade(추상체) 역할을 하며, Logging Framework간 호환성을 보장하는 역할을 한다.

📜 log4j.xml (로그 관련 설정 파일) 구조

  • Appender : 전달된 로그를 어디에 출력할지 결정 (콘솔 출력, 파일 기록, DB 저장)
  • Logger / root : 출력할 메세지를 Appender에 전달한다. (로그 주체)

    # name 속성 : 로그 주체, 패키지 작성
    # addtivilty 속성 : 로그가 상위로 전달할 지 여부, 기본 값은 true
    # appender-ref 자식태그 : ref 속성 값으로 appender 태그 name 값을 지정한다.
    # level 자식태그 : 로그레벨을 설정한다. 설정된 값 이상의 priority일 경우, 로깅을 출력한다.
                            (DEBUF < INFO < WARN < ERROR < FATAL)

📜 Appender의 종류

  • ConsoleAppender : 로그를 콘솔에 출력하기 위한 Appender
  • JDBCAppender : 로그를 RDB에 출력하기 위한 Appender
  • FileAppender : 로그를 파일에 출력하기 위한 Appender
  • RollingFileAppender : FileAppender를 보완한 개념 (일정한 조건 후에 기존 파일을 백업 파일로 바꾸고 다시 처음부터 로깅 시작)

📜 Layout

  • 로그를 어떤 형식으로 출력할 지 결정
profile
누구에게나 필요한 개발자가 꿈

0개의 댓글