치환 문자(?) 질문 드립니다!
안녕하세요! 질문하신 내용 읽고 저도 궁금해서 조금 찾아봤는데요 완벽한 답변은 아니지만 도움이 되실까 싶어 글을 남겨 봅니다. 1. 로거의 동작 원리 org.slf4j.helpers라는 패키지에 보시면 MessageFormatter라는 클래스가 있는데, 그 중 arrayFormat이라는 메소드를 봐보세요.로깅할 문구를 생성할 때 내부적으로 StringBuilder를 쓰고 있음을 알 수 있습니다. log.error("test: {}, {}", 1, 2); 위의 코드를 예시로 들자면, 개발자가 적은 메세지 포맷("test: {}, {}")에서 "{}"가 선언된 위치를 찾아 파라미터(1과 2)로 치환해주는 식으로 동작하는 듯 합니다. 형식 지정자를 따로 사용하지 않아도 로거 문구가 알아서 잘 생성되는 이유는 toString()메소드를 이용해 모든 파라미터를 String 형으로 바꿔주기 때문입니다. (MessageFormatter.safeObjectAppend 참고!) 파라미터에 String 타입이 아닌 Map이나 다른 객체가 들어와도 에러가 나지 않는 이유는 모든 Object는 toString() 메서드를 가지고 있기 때문이죠 이외에 logback의 경우 logback.xml에 지정하는 %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 이런 패턴이 어떻게 적용되는지 궁금하다면package ch.qos.logback.classic 아래에 있는 PatternLayout 클래스를 살펴보시면 좋을 것 같고요! 2. errors.properties의 오류 메시지 동작 원리 totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1} 이런 내용을 errors.properties 파일에 넣었을 때 {0}과 {1}에 어떻게 값이 들어가는지 궁금하시다면스프링 프레임워크의 MessageSourceSupport 클래스와 java.text 아래에 있는 MessageFormat 클래스를 참고해 보시기 바랍니다 디버깅 도구를 쓸 줄 아시면 공부에 많은 도움이 되실 거에요덕분에 저도 공부를 하게 되었네요~ 재밌는 질문 감사합니다 :)