인프런 커뮤니티 질문&답변

조소현님의 프로필 이미지
조소현

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

서블릿 필터 - 요청 로그

logback mdc 관련 질문

작성

·

325

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
강의 마지막에 Logback MDC에 관한 내용이 나와서 적용을 해보았는데요. 설정 방법이 다양하고, 확인이 필요하여 여쭤봅니다.

 

MDC

구글링해보니 어플리케이션 요청에서 처음 만나는 filter에 설정해주는 것이 좋다하여

LogFilter doFilter 메소드 try-catch문에 아래와 같이 적용해주었구요.

@Override
public void doFilter(중략) {
    ..중략


    try {
        log.info("REQUEST [{}][{}]", uuid, requestURI);
        MDC.put("requestId", uuid); //추가
        chain.doFilter(request, response);
        MDC.clear();//추가
    } catch (Exception e) {
        throw e;
    } finally {
        log.info("RESPONSE [{}][{}]", uuid, requestURI);
    }
}

 

log pattern 설정

로그 패턴 설정이 logback-spring.xml, base.xml, properties 등 가이드가 여럿 있었지만,

resources 밑에 logback-spring.xml 생성했습니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{yyyy.MM.dd HH:mm:ss.SSS}] - [%-5level] - [%X{requestId}] - [%logger{5}] - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="consoleAppender"/>
    </root>
</configuration>

 

items/add 호출하여 error log 출력

localhost:8080/items/add 호출하여 공백으로 save 시 로그 패턴 설정해준 위치에 uuid 찍히는 것 확인됐습니다.

 

[2023.12.17 00:51:15.335] - [INFO ] - [] - [h.l.w.f.LogFilter] - REQUEST [b67de768-0ef9-49cb-a4f6-65d9d5983b6f][/items/add]
[2023.12.17 00:51:15.434] - [INFO ] - [b67de768-0ef9-49cb-a4f6-65d9d5983b6f] - [h.l.w.i.ItemController] - errors=org.springframework.validation.BeanPropertyBindingResult: 3 errors
Field error in object 'item' on field 'price': rejected value [null]; codes [NotNull.item.price,NotNull.price,NotNull.java.lang.Integer,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.price,price]; arguments []; default message [price]]; default message [must not be null]
Field error in object 'item' on field 'itemName': rejected value []; codes [NotBlank.item.itemName,NotBlank.itemName,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.itemName,itemName]; arguments []; default message [itemName]]; default message [must not be blank]
Field error in object 'item' on field 'quantity': rejected value [null]; codes [NotNull.item.quantity,NotNull.quantity,NotNull.java.lang.Integer,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.quantity,quantity]; arguments []; default message [quantity]]; default message [must not be null]
[2023.12.17 00:51:15.441] - [INFO ] - [] - [h.l.w.f.LogFilter] - RESPONSE [b67de768-0ef9-49cb-a4f6-65d9d5983b6f][/items/add]

 

질문

  1. 위와 같은 설정 중 보완할 부분이 있을까요.?

  2. logback-spring.xml, base.xml, application.properties 중 어떤 방식을 주로 실무에서 많이 사용하나요? 환경에 따라 다를까요?

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 조소현님

잘 찾아서 적용하셨습니다 🙂

실무에서는 설정이 단순한 경우에는 application.properties를 사용하시면 되고, 좀 더 복잡한 설정을 사용하고 싶다면 logback-spring.xml을 사용하는 것을 권장드려요.

감사합니다.

조소현님의 프로필 이미지
조소현
질문자

아하! 확인 감사드립니다~

조소현님의 프로필 이미지
조소현

작성한 질문수

질문하기