2022 01 08 - oneso123456789/2022 GitHub Wiki

8일 저녁 6시쯤

jdbc-log4j2 설정(log4j는 현재 보안 이슈로 위험하지만 실습을 위해서 사용함)

MyBatis는 내부적으로 PreparedStatement를 이용해서 SQL처리함. 따라서 SQL에 전달되는 파라미터는 JDBC와 같이 '?'로 치환되어서 처리됨. 복잡한 SQL의 경우 '?'로 나오는 값이 제대로 되었는지 확인하기가 쉽지않고, 실행된 SQL의 내용을 정확히 확인하기 어려움. 이런 문제를 해결하기 위해서 SQL을 변환해서 PaeparedStatement에 사용된 '?'가 어떤 값으로 처리되었는지 확인하기 위해 log4jdbc-log4j2 라이브러리를 사용함

pom.xml에 1.16버전의 log4jdbc-log4j를 추가해줌

라이브러리를 추가한 후에는

1.로그 설정 파일을 추가하는 작업
src/main/resources밑에 log4jdbc.log4j.properties작성
작성중 log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.slf4j.Slf4jSpyLogDelegator로 .log를 누락작성해서 오류발생
다음에 작성시는 copy&paste를 사용하던지 아니면 전체 구조를 다 외워야할듯함

2.JDBC 연결정보 수정(root-context.xml) hikariConfig bean에 driverClassName, jdbcUrl property를 수정해줌
driverClassName은 아예 다른 value를 jdncUrl은 jdbc:oracle 사이에 :log4jdbc문자열을 추가해줌
제대로 추가했다면 기존의TimeMapperTests클래스의 테스트 메소드를 실행시 데이터베이스 로그가 정상 출력됨

로그의 레벨 설정

위 테스트 처럼 실행시 상당히 많은 양의 로그가 출력됨 처음에 개발할때는 좋지만 시간이 지날수록 불편하다고 느껴짐
내가 필요한 수준의 로그만 출력시켜야하기때문에 이런 상황을 해결하기 위해 필요한것이 로그레벨임

테스트 코드가 실행될 때의 로그와 관련된 설정은 src/test/resources 밑의
log4j.xml에 해줘야함(src/main/resources가 아닌 src/test/resources임을 주의)

위 경로의 log4j.xml을 실행시 오류 발생함 log4j.DTD파일이 없어서 발생하는 오류임 해결방법은
"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"
DTD파일의 주소를 내 IDE내부 주소가 아닌 위의 값처럼 웹사이트내의 절대경로를 지정하던지
DTD파일을 다운로드 받아서 경로에 넣던지 둘중에 하나를 사용하면됨.

테스트 코드가 실행될때 보여지는 'INFO ...' 메시지는 log4j.xml의
마지막 부분에있는 설정의 영향을 받기 때문임.

log4jdbc에서 출력되는 로그를 조절하려면 추가적인 를 지정해서 처리함.

기본 설정의 로그는 info레벨이기 때문에 jdbc.audit, jdbc.resultset, jdbc.connection의
를 지정해서 warn레벨로 올려줌
수정이후 다시 TimeMapperTests클래스의 테스트 메소드 실행시 이전에 비해서 로그양이 줄어든것을 볼수있음.

로그 레벨에 대한 자세한 설명 https://logging.apache.org/log4j/2.x/manual/customloglevels.html 참고

⚠️ **GitHub.com Fallback** ⚠️