Spring Logging

이상민·2021년 9월 19일
0

스프링

목록 보기
5/9
post-thumbnail

1. 로깅

시스템을 작동할 때 시스템의 작동 상태의 보존, 이용자의 습성 조사 및 시스템 동작의 분석 등을 하기 위해 작동 중의 각종 정보를 기록해둘 필요가 있다. 이 기록을 만드는 것을 로깅이라 한다. 즉 로그 시스템의 사용에 관계된 일련의 사건을 시간의 경과에 따라 기록하는 것이다

  • 네이버 지식백과 : 로깅

자바에는 다양한 로깅 프레임워크가 있다.

  • java.util.logging
  • Apache Commons Logging
  • Log4J
  • Logback => 가장 많이 사용한다

2. SLF4J

Simple Logging Facade for java

  • 로깅 프레임워크들을 추상해 놓은 프레임워크. Facade 패턴을 사용한다

  • SLF4J의 바인딩 모듈을 통해 다양한 로깅 프레임워크를 지원한다

  • 로깅 프레임워크 설정만 바꾸면 코드의 변경 없이 바꿀 수 있다


3. 로그 레벨

  • 각 로그는 레벨이 주어진다

  • 로그 레벨을 설정해 원하는 수준의 로그만 표시할 수 있다


4. SLF4J Logger 사용하기

4-1) logger 선언 및 생성

// 로거 선언 및 생성 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


// 클래스의 canonical 이름을 주입해 패키지 수준에 따른 로깅 설정, 확인 등도 가능하다 
final Logger log = new LoggerFactory.getLogger(this.getClass());
  • 로거는 한번 생성하면 보안상 바꿀 수 없도록 보통 final로 선언해준다

4-2) log 찍기

// log.로그레벨(메시지);
log.info("this is a info log");
log.error("error -> {}", error);

5. Logback 설정하기

  • Logback은 다음 순서대로 설정을 찾는다. 설정 파일이 없을 시 다음 우선순위 설정 파일을 찾는 방식이다. 문법을 외울 필요는 없지만, 혼자 찾아보며 수정을 할 수 있도록 익숙해지자

  • Logback 설정 문서 : http://logback.qos.ch/manual/configuration.html

  1. logback-test.xml
  2. logback.groovy
  3. logback.xml
  4. 기본 설정

5-1) 기본적인 콘솔 logger 설정 예시

<!-- src.main.resources.logback.xml -->
<configuration>
    <property name="CONSOLE_LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
  
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>
  
    <logger name="org.package.SomeClass" level="info"/>

    <root level="warn">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>
  • <property> 변수를 선언하듯 속성을 설정
  • <appender> 어디에 어떤 포멧으로 로그를 남길지 설정
  • <logger> 로거의 위치에 따른 설정
  • <root> 루트 로거 설정

5-2) 로그에 색깔 추가하기

// 시간을 빨간색으로 표시하기
%red(%d{HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %logger{36} - %msg%n

5-3) File Appender 추가하기

  • 지정한 위치의 파일에 로그를 남기는 File Appender를 추가할 수 있다
  • 파일에 저장할 때는 색상이 깨져 추가하지 않는다
  • 단일 파일에 로그를 남기면 너무 커지고 관리가 어려워 잘 사용하지 않는다
    <property name="FILE_LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/${bySecond}}.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    
    <root level="warn">
        <appender-ref ref="FILE"/>
    </root>

5-4) Rolling File Appender 추가하기

  • 날짜, 용량과 같이 특정 설정에 따라 로그 파일을 생성하고 저장하도록 할 수 있다
  • 아래는 날짜를 기준으로 rolling하는 appender를 설정했다
    <property name="FILE_LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>

    <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 오늘의 로그는 access.log 파일에 저장 -->
        <file>logs/access.log</file>
        <!-- 날짜를 기준으로 rolling 하도록 설정 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/access-%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>

        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    
    <root level="warn">
        <appender-ref ref="ROLLING_FILE"/>
    </root>
profile
편하게 읽기 좋은 단위의 포스트를 추구하는 개발자입니다

0개의 댓글