프로그램/JAVA

[Logback] Spring log 제외 및 설정하기

프뚜 2023. 1. 7. 10:00
728x90
반응형
SMALL

안녕하세요!

프뚜입니다.

 

LogbackFilter를 통해 log를 컨트롤하려고 합니다.


[개발 환경]

 - OS: Windows 10 64bit

 - JAVA: 1.8


# logback.xml 설정하기

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 2022.12.30[프뚜]: LogbackFilter 설정 -->
        <filter class="tistory.petoo.config.filter.LogbackFilter"/>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>[%F]%M\(%L\) : %m%n</pattern>
        </layout>
    </appender>

    <root level="INFO">
        <appender-ref ref="console"/>
    </root>
</configuration>

./resources/logback.xml을 생성 후 filter연결을 합니다.


# LogbackFilter Class 생성하기

public class LogbackFilter extends Filter<ILoggingEvent> {

    // 2022.12.30[프뚜]: 정규식을 사용하여 해당 Class Path 를 제외
    private String[] excludeClassPathPattern = {
        "tistory.petoo.controller.([^/]+)",
    };

    @Override
    public FilterReply decide(ILoggingEvent event) {
        for (String pattern : excludeClassPathPattern) {
            if (Pattern.matches(pattern, event.getLoggerName())) {
                return FilterReply.DENY;
            }
        }

        return FilterReply.ACCEPT;
    }

}

tistory.petoo.controller.* Class Path는 제외했습니다.


# TestController Class 생성하기

@Slf4j
@RequiredArgsConstructor
@RestController
public class TestController {

    @GetMapping("/")
    public ResponseEntity<?> main() throws Exception {
        log.info("[LOG] Method: main()");
        return ResponseEntity.ok().body("main");
    }

    @PostMapping("/test")
    public ResponseEntity<?> test(@RequestBody Map param) throws Exception {
        log.info("[LOG] Method: test()");
        return ResponseEntity.ok().body(param);
    }

    @PostMapping("/exclude1/test")
    public ResponseEntity<?> exclude1(@RequestBody Map param) throws Exception {
        log.info("[LOG] Method: exclude1()");
        return ResponseEntity.ok().body(param);
    }

    @PostMapping("/exclude2/t/e/s/t/double/test")
    public ResponseEntity<?> exclude2(@RequestBody Map param) throws Exception {
        log.info("[LOG] Method: exclude2()");
        return ResponseEntity.ok().body(param);
    }

}

/, /test, /exclude1/test, /exclude2/t/e/s/t/double/test URI가 있습니다.


# Postman 테스트하기

/ URI에 request를 실행시켰으나, LogbackFilter에 제외됐기 때문에 log가 실행되지 않았습니다.

 

 

@GetMapping("/")
public ResponseEntity<?> main() throws Exception {
    log.info("[LOG] Method: main()");
    return ResponseEntity.ok().body("main");
}

[LOG] Method: main() Log가 있으나 실행되지 않습니다.


자세한 내용은 소스코드를 통해 확인해보실 수 있습니다. (제목과 Git Comment는 같습니다.)

https://github.com/JeongSeongSoo/spring-tistory

 

GitHub - JeongSeongSoo/spring-tistory

Contribute to JeongSeongSoo/spring-tistory development by creating an account on GitHub.

github.com

728x90
반응형
LIST