치환 문자(?) 질문 드립니다!
930
작성한 질문수 19
답변 3
2
안녕하세요! 질문하신 내용 읽고 저도 궁금해서 조금 찾아봤는데요
완벽한 답변은 아니지만 도움이 되실까 싶어 글을 남겨 봅니다.
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에 지정하는
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
이런 패턴이 어떻게 적용되는지 궁금하다면
package ch.qos.logback.classic 아래에 있는 PatternLayout 클래스를 살펴보시면 좋을 것 같고요!
2. errors.properties의 오류 메시지 동작 원리
이런 내용을 errors.properties 파일에 넣었을 때
{0}과 {1}에 어떻게 값이 들어가는지 궁금하시다면
스프링 프레임워크의 MessageSourceSupport 클래스와
java.text 아래에 있는 MessageFormat 클래스를 참고해 보시기 바랍니다
디버깅 도구를 쓸 줄 아시면 공부에 많은 도움이 되실 거에요
덕분에 저도 공부를 하게 되었네요~ 재밌는 질문 감사합니다 :)
0
오 감사합니다! 덕분에 디버그 모드로 브레이크 포인트에 진입하는거 처음 해봤습니다! 디버깅 도구도 좀 더 찾아서 공부해보겠습니다.
+ 원래 질문도 시원하게 해결됐습니다 감사합니다 !
0
답변 감사합니다. 자바 format 함수가 있는 것은 확인했는데 질문 좀 정리해서 드리겠습니다!
1. slf4j나 bindingResult에서 arguments를 치환하는 것은 내부적으로 format 함수가 사용되는 건가요??
2. format 함수를 찾아보니 format("%d", a)는 형식 지정자를 사용해야 하는데 slf4j나 bindingResult처럼("{0}", a) 형식 지정자 없이 사용하는 건 어떻게 가능한 건가요??
0
slf4j가 제공하는 형식, bindingResult 등은 특별한 포멧이 있는 것은 아니고 각자의 방식으로 제공되는 것으로 알고 있습니다.
혹시 관련해서 아시는 분 있으면 말씀해주세요.
감사합니다.
이미지 업로드와 db 트랜잭션 묶는법
0
50
1
Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4
0
60
2
MessageSourceTest 코드
0
50
1
인터셉터 에러 설정
0
50
1
resolveArgument()메서드 질문
0
59
1
43강 검증1 에서 실패 로직 관련 질문있습니다.
0
64
2
타임리프 3.X 버전 rendering, serializer 에러 해결 방법
2
134
3
스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ
0
93
3
pdf 오타 문의
0
58
1
ItemUpdateForm 검증 관련 질문입니다.
0
52
1
22page 링크 주소 변경
0
59
2
특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문
0
53
1
섹션3번 수업에 대한 질문입니다.
0
85
2
@Autowired 보다 더 좋은 방법이 어떤 걸까요?
0
87
2
타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.
0
66
1
자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다
0
143
3
스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문
0
66
1
톰캣 에러 페이지가 안보입니다.
0
108
2
apiEceptionController에서 센드 에러 호출하면 안되는지?
0
81
1
세션 타임아웃시 쿠키 삭제 방법이 없나요?
0
120
2
ApiExceptionController 질문드립니다.
0
64
1
셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?
0
67
1
MemberRepository 필드의 fianl 선언 유무
0
85
2
혹시 index.html 에서는 fragment 사용이 안되는건가요
0
60
1





