728x90
320x100
오늘은 아래와 같이 콘솔창에 쿼리문이랑 결과값이 테이블 형태로 예쁘게(?) 찍히는 걸 해보겠음.
[참고]
- 스프링부트에서는 자체적으로 Log관련들을 제공하고 application.properties를 수정하면 로그에 쿼리문이 찍힐 수 있도록 제공하기는한데 쿼리문이 뭔, 한줄로 주르르르륵 찍혀가지고 안보느니만 못한 형태로 나옴. 그래서 나는 Log4jdbc 를 Dependency에 추가하여 위와 같이 조금 더 편리하게 볼 수 있도록 할 예정!
- 나는 스프링부트 3.2.6 버전 / Mybatis / gradle / IntelliJ 을 사용하고 있기 때문에 이 스택에 맞춰 해볼 것임.
1. build.gradle 수정
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' /*이 부분 추가!*/
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
Log4jdbc를 Dependency에 추가해준다.
2. application.properites 수정
spring.datasource.url: jdbc:mysql://localhost:3306/KNOU_CBT?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver
수정 전에 위와 같이 설정되어 있었다면
spring.datasource.url: jdbc:log4jdbc:mysql://localhost:3306/KNOU_CBT?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
위와 같이 수정해준다.
spring.datasource.url: jdbc:log4jdbc:mysql://localhost:3306/KNOU_CBT?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
다르지 않은것 같지만 다름! 잘 봐야함.
3. log4jdbc.log4j2.properties 생성
- og4jdbc.log4j2.properties 이름의 파일을 하나 생성해준다.
- 생성경로는 resources 바로 아래 만들어 주면 됨.
log4jdbc.spylogdelegator.name = net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength = 0
안에 내용은 위와 같이 입력한다.
첫줄은 가장 기본적으로 해줘야 하는 것 같고, 두번째 줄은 쿼리를 최대 몇줄까지 보여줄 건가 에 대한 설정인데 0으로 하면 그냥 길이 제한 없이 다 출력된다 그래서 나는 0으로 적어둠.
그런데, 여기까지만 해놓고 돌려봐도 쿼리가 잘 뜨는데 불 필요한 로그까지 엄청 뜸.
그래서 로그에 대한 설정을 해줘야 함.
4. logback-spring.xml 생성
- 로그에 대한 설정을 해주는 파일이 바로 logback-spirng.xml 임
- 이파일도 resources밑에 바로 만들어줌.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-3level %logger{5} - %msg %n</pattern>
</encoder>
</appender>
<logger name="jdbc" level="OFF"/>
<logger name="jdbc.sqlonly" level="OFF"/>
<logger name="jdbc.sqltiming" level="DEBUG"/>
<logger name="jdbc.audit" level="OFF"/>
<logger name="jdbc.resultset" level="OFF"/>
<logger name="jdbc.resultsettable" level="DEBUG"/>
<logger name="jdbc.connection" level="OFF"/>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
내용은 위와 같이 넣어주면 되는데 설정들은 아래와 같은 뜻이라고 함.
- jdbc.sqlonly : SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다.
- jdbc.sqltiming : SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다.
- jdbc.audit : ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다.
- jdbc.resultset : ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다. jdbc.resultsettable : SQL 결과 조회된 데이터의 table을 로그로 남긴다.
해당 내용은 https://www.leafcats.com/45 블로그의 내용을 그대로 인용하였습니다.
이렇게 해주면, 아래와 같이 쿼리문과 테이블이 예쁘게 뜬다~
출처 및 참고 - https://www.leafcats.com/45
728x90
320x100
'💻 하나씩 차곡차곡 > Back-end' 카테고리의 다른 글
[스프링(Spring)] HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법 (@RequestParam, @RequestBody, @ModelAttribute 이해하기) (0) | 2024.08.02 |
---|---|
[스프링(Spring)] 어노테이션(Annotation)이란? (특징, 원리, 자주 쓰는 어노테이션 정리) (0) | 2024.08.02 |
[Spring boot(스프링부트)/Mybatis] Xml에 카멜표기법 설정하기 (0) | 2024.06.07 |
[IntelliJ(인텔리제이)] xml에 뜨는 밑줄, 노란선 없애보기 (0) | 2024.04.01 |
[디비에버(DBeaver)] 설치 및 데이터베이스(MySQL) 연결 (0) | 2024.03.27 |