Logging

2024. 1. 15. 14:10
728x90

1. Logging

 

System.out.println : 콘솔창에 인자를 출력한다.

그러나, 실제 서비스 중인 어플리케이션의 콘솔을 계속 보고 있을 수가 없다....!! 어플리케이션이 실행중일 때 일어난 일들을 기록하는 것이 좋겠다! !  >> 를 로그로 남긴다! 

 

- Logging : 로그를 남기는 행위

- Logger : 로그를 작성하기 위해 사용하는 객체 

 

1) Slf4j - Simple Logging Facade 4 Java

: Java에서 로그를 남기는 방법을 통일해주는 프레임워크 

- 자기 자신을 로그를 남기는 프레임워크가 아니라.... 다양한 로그 프레임워크를 사용하는 방법의 Facade(디자인 패턴)일 뿐이다!

 

package com.example.article;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class RootController {

    private static final Logger log = LoggerFactory.getLogger(RootController.class);
	// 대신 Lombok annotation @Slf4j를 쓸 수 있다.

    @GetMapping
    public String root() {
        return "redirect:/article";
    }

    @GetMapping("/log")
    public String logTest() {
        log.trace("TRACE message");
        log.debug("DEBUG message");
        log.info("INFO message");
        log.warn("WARN message");
        log.error("ERROR message");
        return "log";
    }
}

 

** 로그 중요도 (로그 레벨)

  • TRACE : 아주 단순한 작업에도 남기는 레벨
  • DEBUG : 구체적인 내부 플로우에 대하여 기록을 남기는 레벨, 디버깅에 활용하는 수준
  • INFO : 어플리케이션이 실행중일 때 정보 제공의 목적으로 남기는 레벨
  • WARN : 아직 문제가 되진 않았지만, 악영향이 있을 수 있는 레벨
  • ERROR : 어플리케이션이 정상적으로 동작하지 않았을 때 남기는 레벨
  • 기본 레벨값은 INFO. 어느 레벨을 정하면 그보다 더 높거나 같은 레벨의 로그만 보인다.
  • 조정하고 싶은 경우 설정 변경
//application.yaml 설정

logging:
  level:
    root: trace
    // root : 모든 Logger가 기본으로 적용할 출력 레벨
    
logging:
  level:
    root: info
    com.example.article: debug
    //기본은 info, 특정 패키지는 debug레벨로 설정도 가능

 

 

2. Logback 설정 구경하기

: 현재 스프링부트에서 기본으로 사용하는 Logging 프레임워크

- XML을 이용해 설정

- 특정 파일에 로그를 남기거나, 특정 날짜까지의 기록만 남겨두고 싶을 때.

- SpringBoot는 resources의 logback.xml 또는 logback-spring.xml 파일을 자동으로 사용한다.

 

1) <appender> 인터페이스 설정

:  로그를 남기는 방식을 다양한 방식으로 제공

- ConsoleAppender : 터미널 화면에 로그를 남기기 위한 Appender

- FileAppender : 특정 파일에 로그를 남기기 위한 Appender

- RollingFileAppender : 특정 조건에 따라 파일의 갯수 및 크기를 유지하면서 로그를 남기기 위한 Appender

 

2) <rollingPolicy

: 서버에 남아있는 로그를 일정한 양만 남기는 용도

- maxFileSize : 로그파일 당 크기 100MB

- maxHistory : 이 Appender가 유지하는 총 로그파일의 갯수

- totalSizeCap : 모든 로그 파일의 크기 

 

3) <root> & <logger>

: LoggerFactory로 만들어진 로거가 어떤 Appender를 사용할지 정하는 설정

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOGS" value="./logs" />

    <appender name="Console"
              class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1}): %msg%n%throwable
            </Pattern>
        </layout>
    </appender>
    
        <!--FileAppender: 파일에 로그를 남긴다..-->
    <appender name="File" class="ch.qos.logback.core.FileAppender">
        <file>${LOGS}/file-log.log</file>
        <encoder
                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d %p %C{1} [%t] %m%n</Pattern>
        </encoder>
    </appender>
    
    <!--RollingFileAppender-->
    <appender name="RollingFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS}/rolling-file-log.log</file>
        <encoder
                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d %p %C{1} [%t] %m%n</Pattern>
        </encoder>

        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOGS}/archived/rolling-file-log-%d{yyyy-MM-dd_HH-mm-ss}.%i.log
            </fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>10</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
    </appender>
    
    <!-- LOG everything at INFO level -->
	<!-- 모든 로거가 어떤 설정으로 실행될지...-->
    <root level="info">
        <appender-ref ref="Console" />
        <appender-ref ref="File" />
    </root>

	<!-- article 패키지 내에서는 warn 레벨로 콘솔로그를 찍도록-->
    <logger name="com.example.article" level="warn" additivity="false">
        <appender-ref ref="Console" />
    </logger>

</configuration>

 

 

 

>> 결과 : Console 창에 logger가 뜬다. (ConsoleAppender) &&  file-log.log가 생겼다. (FileAppender)

 

 

4) application.yaml에서 설정 파일 지정! 

: 어떤 Logback설정을 사용할지를 전달.

// application.yaml
logging:
  config: file:logback-spring.xml

 

 

 

 

728x90

'Programming > Spring, SpringBoot' 카테고리의 다른 글

연습문제(로깅)  (0) 2024.01.15
Profiles  (0) 2024.01.15
Spring Beans  (0) 2024.01.15
Spring Data JPA (Java Persistence API)  (2) 2024.01.07
MyBatis  (1) 2024.01.04

BELATED ARTICLES

more