
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
2. application.properties DB 설정 변경
spring.datasource.username=web_user
spring.datasource.password=pass
spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3306/mydb
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
우리가 그동안 사용했던 DB는 log4jdbc.log4j2.properties 에 들어가 있다.
<!-- SQL LOG 옵션 설정 (쿼리문과 걸린시간, 결과를 보도록 한다.)-->
<!-- 커넥션의 연결과 종료를 로그에 남김 -->
<logger name="jdbc.connection" level="INFO"/>
<!-- 실행되는 쿼리문을 로그로 남김 -->
<logger name="jdbc.sqlonly" level="OFF"/>
<!-- 쿼리문 + 걸린 시간 (이게 있어서 위에를 OFF로 설정함)-->
<logger name="jdbc.sqltiming" level="INFO"/>
<!-- 쿼리를 수행하기 까지의 상세한 내용 하나하나 다 남김(로그가 많이 길어진다.) -->
<logger name="jdbc.audit" level="OFF"/>
<!-- select 수행시 결과인 resultSet 을 보여준다. -->
<logger name="jdbc.resultset" level="OFF"/>
<!-- 결과값을 테이블(표) 형식으로 보여준다. (이게 있어서 위에를 OFF로 설정함) 너무 많으면 OFF로 설정-->
<logger name="jdbc.resultsettable" level="INFO"/>
<!-- Root Logger -->
<!-- TRACE > DEBUG > INFO > WARN(경고) > FATAL(진짜 에러) 순서로 찍어준다 -->
<root level="INFO">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
이후 프로젝트를 실행해 보면
Connection opened : 커넥션 연결 (기본 설정이 10개라서 10개가 나온다.)INFO 24-11-14 14:18:45 [sqltiming:373] - SELECT * FROM bbs ORDER BY idx DESC {executed in 3 msec} : 쿼리문 + 실행 시간Total: 734 : 총 행 수Completed 200 OK : 상태C드라이브에 logs 라는 폴더에 server.log 파일을 확인하면 로그를 확인할 수 있다.
(▼ 위에 대한 설정 코드)
<!-- 로그의 파일 저장 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 저장 위치 -->
<file>C:/logs/server.log</file>
<!-- 출력 패턴 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- 롤링 정책(언제 끊어서 말아줄 것인가) -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 어떤 이름으로 저장 할래? -->
<fileNamePattern>C:/logs/server.%d{yy-MM-dd}.log</fileNamePattern>
<!-- 얼마나 저장할래?(기본 : 일단위) 용량 단위로 끊을 수 있다. -->
</rollingPolicy>
</appender>
❗ 주의사항
이 로그가 윈도우에서 저장될 수도 있고, 리눅스에도 저장될 수도 있는데 리눅스는 C드라이브가 없기 때문에 별도로 따로 설정이 필요하다.
<!-- 패턴 등록 -->
<!-- INFO 24-05-27 12:09:05[http-nio-8080-exec-2] [BoardController:28] - list 요청 -->
<!--
// - 왼쪽 정렬 , + 오른쪽 정렬
%-5 : 좌측정렬 5자(5자가 안되면 나머지는 공백처리)
level : 로그레벨
%d : 로그의 기록 시간
{yy-MM-dd HH:mm:ss} : 기록패턴
[%thread] :프로그램을 실행시키고 있는 스레드 <!--[http-nio-8080-exec-2] 이 부분이 스레드 -->
[%logger{0}: 로거의 소스 단계(수정가능) *어디 클래스까지만 보여줄지, 패키지까지 보여줄지 등..
%line] : 로그가 찍힌 소스의 라인수
- %msg : 메시지
%n : 개행(줄바꿈)
%C : 해당 클래스의 풀 경로 <!-- [%logger{0} 를 대신해서 사용 가능 -->
%M : 실행한 메서드 명
-->
<property name="LOG_PATTERN" value="%-5level %d{yy-MM-dd HH:mm:ss} [%logger{0}:%line %M] - %msg%n"/>
여기에서 [main] → main 스레드가 하는 일 / [http-nio-8080-exec-n] → n 번 스레드가 일을 처리 했다는 것을 확인할 수 있다.