SpringFramework

SLF4J Logback 설정 및 전역 컨트롤러 선언

유혁스쿨 2022. 11. 20. 23:26
728x90
반응형

 

public class logBackController {

    private final Logger LOGGER = LoggerFactory.getLogger(SwaggerController.class);

    @GetMapping("/logExam")
    public String getLogExam(String name) {
        LOGGER.info("로그 테스트 : "+ name);
        LOGGER.info("로그 테스트 : {}", name);
        return name;
    }
}

 

 

기본적으로 XML파일 명을 logback-spring.xml로 지정하면 스프링에서 읽어들입니다.

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

    <!-- Appenders -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger LogOutPut : %msg%n</pattern>
        </encoder>
    </appender>

    <!-- TRACE > DEBUG > INFO > WARN > ERROR > OFF -->
    <!-- Root Logger-->
    <root level="INFO">
        <appender-ref ref="console"/>
    </root>

</configuration>

5레벨중 INFO 레벨에 대한 로그만 출력하는 설정파일 내용 입니다.

 

 

XML파일 생성 후 컨트롤러에서 다음과같이 전역변수로 선언한 후 메소드 내에서 사용합니다.

private final Logger LOGGER = LoggerFactory.getLogger(SwaggerController.class);

 

 

다음은 logback을 활용해 로그를 출력하는 코드입니다.

String name = " '이름' 문자열 출력"
LOGGER.info("로그 테스트 : "+ name);
LOGGER.info("로그 테스트 : {}", name);
String age = "'나이' 문자열 출력"
LOGGER.info("로그 테스트 : "+ name + ", " + age);
LOGGER.info("로그 테스트 : {}, {}", name, age);

log4j와 같이 문자열에 {}를 입력한 뒤 ,쉼표로 구분하여 문자열이나 변수를 나열하면 순차적으로 바인드 됩니다.

 

 

public class logBackController {

    private final Logger LOGGER = LoggerFactory.getLogger(SwaggerController.class);

    @GetMapping("/logExam")
    public String getLogExam(String name, Integer age) {
    
        LOGGER.info("로그 테스트 : "+ name);
        LOGGER.info("로그 테스트 : {}", name);
        LOGGER.info("로그 테스트 : "+ name + ", " + age);
        LOGGER.info("로그 테스트 : {}, {}", name, age);
        
        return name;
    }
}

 

만약 모든 컨트롤러에서 사용하고자 하는데 매번 선언하기 어려울때는 자바의 특성인 상속을 활용합니다.

이때 접근지정자는 protected를 선언합니다.

@Controller
public class BaseController {
    protected final Logger LOGGER = LoggerFactory.getLogger(getClass());
}

동일한 패키지 내에 존재하거나 파생클래스에서만 접근 가능하도록 하기 위해서 입니다. (상속 받아 사용하기 때문)

또한 클래스는 명시적으로 지정하지 않고 가변적으로 읽어들일 수 있도록 getLogger메소드 매개변수에 getClass() 메소드를 호출->넘겨줍니다.

 

public class logBackController extends BaseController{

    @GetMapping("/logExam")
    public String getLogExam(String name, Integer age) {
    
        LOGGER.info(name);
        LOGGER.info("{}", name);
        LOGGER.info(name + ", " + age);
        LOGGER.info("{}, {}", name, age);
        
        return name;
    }
}


위와같이 출력됩니다.

 

저는 제가 알아보기 쉽고 간단하게 표현하고자 XML파일에서 pattern을다음과같이 설정했습니다.

<pattern>[%d{yy-MM-dd HH:mm:ss.SSS}] [%level] [%F] [%M] ▶ LOG : %msg%n</pattern>

아래와 같이 출력됩니다.

 

https://goddaehee.tistory.com/206

 

[스프링부트 (5)] Spring Boot 로그 설정(1) - Logback

[스프링부트 (5)] Spring Boot Log 설정(1) - Logback 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 부트 Log 설정 - 로그백] 입니다. : -) 1. Logback 이란? 특징? - 자바 오픈소스 로깅 프레임워크, SLF4J의

goddaehee.tistory.com

logback에 대해 기본적인 설정과 기본적인 구현 내용만 담았으며, 제 블로그보다 더 많은 내용을 얻을 수 있는 블로그 링크를 공유합니다.

 

 

 

추가적으로 전역 컨트롤러에서는 모든 컨트롤러에서 공통으로 사용도가 높은 이번시간에 정리한 '로그'나, 기타 유틸리티 기능들을 구현하고 해당 클레스를 상속받아 자식 컨트롤러에서 기능을 사용할 수 있도록 설계합니다.

 

 

logback의 추가 설정과, BaseController의 내용은 추후 포스팅을 통해 계속 이어서 작성하도록 하겠습니다.

감사합니다.

 

 

728x90
반응형