길민호(ethan.mino)
코딩수첩
길민호(ethan.mino)
전체 방문자
오늘
어제
  • 분류 전체보기 (215)
    • Computer Science (0)
    • Web (6)
      • CSS (0)
      • HTML (0)
    • Node.js (0)
    • Javascript (2)
    • Java (46)
      • Spring (27)
      • Jsp (0)
    • C\C++ (2)
    • Programming (0)
    • AI (0)
    • Database (7)
    • Git (5)
    • Algorithm (119)
      • Stack (0)
      • Queue (0)
      • Linked List (0)
      • Sort (0)
      • Simulation (27)
      • Recursion (0)
      • Backtracking (4)
      • Two Pointer (3)
      • Dynamic Programming (19)
      • Greedy (10)
      • Graph (3)
      • Dijkstra (1)
      • BFS\DFS (8)
      • Floyd (1)
      • MST (4)
      • Tree (4)
      • Binary Search (8)
      • Binary Search Tree (4)
    • IntelliJ (4)
    • Vscode (0)
    • Operating System (0)
    • 후기 (3)
    • 성장일지 (13)
    • 스터디 (7)
    • 설치 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ㅡ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
길민호(ethan.mino)

코딩수첩

SLF4J란?
Java/Spring

SLF4J란?

2020. 7. 20. 09:26

1. SLF4J란?

  • logging 관련 라이브러리는 다양하다.
  • SLF4J는 이러한 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법을 제공한다.
  • SLF4J는 로깅 Facade이다.
  • 로깅에 대한 추상 레이어를 제공하는 것이고 interface의 모음이다.

2. SLF4J를 이용해 로깅 라이브러리 사용하기

  • 어플리케이션은 SJF4J를 사용함으로써, 로깅 라이브러리를 어떤 것을 사용하던지 같은 방법으로 로그를 남길 수 있게함.
  • 로그 라이브러리를 교체하더라도, 어플리케이션의 코드는 변경될 필요가 없음.

3. Maven에 SLF4J와 logback 의존성 추가하기

  • 참고로 logback-classic 1.2.3은 이미 slf4j-api 1.7.25에 대한 의존성을 가지고 있기 때문에 slf4j-api를 추가할 필요는 없다.
  • Spring은 기본적으로 아파치 재단의 commons-logging을 사용한다.
  • logback 라이브러리를 사용하려면 제거해야한다.
  • Spring 라이브러리에서 commons-logging을 제거하면, Spring을 사용할 때 commons-logging 라이브러리를 찾으면서 오류(ClassNotFoundException)가 발생한다.
  • 이러한 오류를 제거하기 위해 jcl-over-slf4j를 추가한다.
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.25</version>
</dependency>

logback 설정

  • logback.xml
  • Appender 설정
  • logger 설정
  • root 설정

Appender : 어디에 어떤 포맷으로 로그를 남길 것인지를 설정

  • ConsoleAppender : 콘솔에 로그를 어떤 포맷으로 출력할지를 설정할 때 사용한다.
  • FileAppender : 파일에 로그를 어떤 포맷으로 출력할지를 설정한다.
  • RollingFileAppender : 로그의 양이 많아지면, 하나의 파일로 관리하기 어려워지는 경우가 생긴다. 이런 문제를 해결하기 위해 하루 단위로 로그를 관리하고자 할 경우 사용된다.

ConsoleAppender 설정 

  • name을 보통은 "CONSOLE"로 지정한다.  
  • Pattern 요소에는 log를 출력할 포맷을 지정한다.
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
    </encoder>
</appender>

RollingFileAppender 설정

  • 기본적으로 기록되는 파일명은 access.log
  • rollingPolicy에는 파일이 언제 백업될지를 설정한다.
  • 하루 단위로 로그 파일이 생성되고, 최대 maxHistory만큼 생성된다. (이전의 로그 파일은 삭제된다.)
  • Pattern 요소에는 log를 출력할 포맷을 지정한다.
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>access.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>access-%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
    </encoder>
</appender>

 

4. 로그 레벨 설정과 root 설정

  1. trace (아래로 내려갈 수록 log 레벨이 높음)
  2. debug
  3. info
  4. warn
  5. error
  • 어떤 오류를 어떤 방식으로 로그를 남길지 정할 수 있다
  • logger 요소는 어떤 패키지 이하의 클래스에서 어떤 레벨 이상의 로그를 출력할지를 결정
  • org.springframework로 시작하는 패키지에 속한 클래스에서 출력하는 로그는 info이상 레벨(info, warn, error)로 출력하라.
  • kr.or.connect로 시작하는 패키지에 속한 클래스에서 출력하는 로그는 debug이상 레벨로 출력하라.
<logger name="org.springframework" level="info"/>
<logger name="kr.or.connect" level="debug"/>
<root level="debug">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
</root>

 

5. Logger 객체 선언

  • 로그를 남기고자 하는 클래스에 로거 객체를 필드로 선언한다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
.......
private Logger logger = LoggerFactory.getLogger(this.getClass());

 

6. 로그 출력 메소드

  • 문자열 결합을 위해 '+' 연산자를 사용하지 않는다. (문자열을 '+'연산자를 사용해서 연결하면 속도가 느려짐)
  • 로그로 남길 변수의 수만큼 {}를 이용한다.
  • 로그의 수준에 따라 debug(), info(). warn(), error() 메소드를 이용한다.
logger.trace("{} {} 출력", "값1", "값2");
logger.debug("{} {} 출력", "값1", "값2");
logger.info("{} {} 출력", "값1", "값2");
logger.warn("{} {} 출력", "값1", "값2");
logger.error("{} {} 출력", "값1", "값2");

 

참조 URL

  • https://www.edwith.org/boostcourse-web/lecture/16814/

'Java > Spring' 카테고리의 다른 글

Multipart란?  (1) 2020.07.22
로깅(Logging)이란?  (0) 2020.07.20
Spring Security  (0) 2020.07.18
아큐먼트 리졸버란?  (1) 2020.07.17
인터셉터(Interceptor)란?  (0) 2020.07.17
    'Java/Spring' 카테고리의 다른 글
    • Multipart란?
    • 로깅(Logging)이란?
    • Spring Security
    • 아큐먼트 리졸버란?
    길민호(ethan.mino)
    길민호(ethan.mino)
    💻 호기심 많은 서버 개발자 길민호입니다.

    티스토리툴바