어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨
23.06.19 / 데이터 베이스 연결과 로그 (log4jdbc) 본문
728x90
프로젝트 생성


#서버포트 설정
server.port=80
#thymeleaf cache 설정(새로고침 반영)
spring.thymeleaf.cache=false
#db 연결 설정
spring.flyway.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/ksmart47db_basic?serverTimezone=UTC$characterEncodeing=UTF8
spring.datasource.username=ksmart47id
spring.datasource.password=ksmart47pw
# log-back file 설정
logging.config=classpath:logback-spring.xml
라이브러리 추가
<!-- 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>
<!-- https://mvnrepository.com/artifact/nz.net.ultraq.thymeleaf/thymeleaf-layout-dialect -->
<dependency>
<groupId>nz.net.ultraq.thymeleaf</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
</dependency>
[ Log4j ]
Logback 설정 : 로깅 구현체

logback-spring.xml
log level의 종류 (보통 debug, info 설정 / 배포할 때는 보통 error)
trace로 설정하면 trace 하위의 모든 정보가 찍힘(debug, info, warn, error, fatal)
warn으로 설정하면 warn 하위의 모든 정보가 찍힘(error, fatal)
- trace : 신규 추가된 레벨. 디버그 레벨이 너무 광범위한 것을 해결하기 위해 좀 더 상세한 상태를 나타냄
- debug : 개발 시 디버그 용도로 사용한 메시지
- info : 로그인, 상태 변경과 같은 정보 메시지
- warn : 처리 가능한 문제, 향후 에러의 원인이 될 수 있는 경고 메시지
- error : 요청을 처리하는 중 문제가 발생한 상태
- fatal : 아주 심각한 에러가 발생한 상태
<?xml version="1.0" encoding="UTF-8"?>
<!--
jdbc.sqlonly : Logs only SQL
jdbc.sqltiming : Logs the SQL, post-execution, including timing execution statistics
jdbc.audit : Logs ALL JDBC calls except for ResultSets
jdbc.resultset : all calls to ResultSet objects are logged
jdbc.connection : Logs connection open and close events
-->
<configuration>
<!-- 변수 지정 -->
<!-- LOG_DIR : 로그 디렉토리 위치 / LOG_PAHT_NAME : 로그 패스 설정 -->
<property name="LOG_DIR" value="src/main/resources/logs" />
<property name="LOG_PATH_NAME" value="${LOG_DIR}/application.log" />
<!-- ConsoleAppender -->
<!-- 콘솔에 출력하는 형식 / -5level : 로그의 레벨 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--Query ConsoleAppender -->
<appender name="QSTDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} %n %msg%n</pattern>
</encoder>
</appender>
<!-- Rolling File Appender
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
파일 경로
<file>${LOG_PATH_NAME}</file>
출력패턴
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</pattern>
</encoder>
Rolling 정책
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/application.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
파일당 최고 용량 10MB
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
일자별 로그파일 최대 보관주기(일단위)만약 해당 설정일 이상된 파일은 자동으로 제거
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender> -->
<!-- 프로젝트 패키지 안 클래스에 설정된 로그 출력 -->
<!-- ksmart.mybatis : 패키지 이름 -->
<!-- level="INFO" : INFO 레벨일 것은 모두 로그에 찍는다. -->
<!-- additivity="false" 로그를 한 번 만 찍겠다. true : 두 번 찍힘 -->
<!-- level="OFF" : 로그 OFF -->
<logger name="ksmart.mybatis" level="INFO" additivity="false">
<!-- 위에서 작성해뒀던 STDOUT를 찍겠다. appender-ref 태그 없으면 안 찍힘 -->
<appender-ref ref="STDOUT" />
</logger>
<!-- 아직 싱글톤 안나가서 하지 않는 것이 맞음 -->
<logger name="org.springframework" level="OFF" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<!-- log4jdbc 옵션 설정 -->
<!-- 모든 로그를 찍겠다. -->
<logger name="jdbc" level="OFF" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<!-- 커넥션 open close 이벤트만 로그 -->
<logger name="jdbc.connection" level="OFF" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<!-- SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문 출력 -->
<logger name="jdbc.sqlonly" level="OFF" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함하여 출력. -->
<logger name="jdbc.sqltiming" level="INFO" additivity="false">
<appender-ref ref="QSTDOUT" />
</logger>
<!-- ResultSet을 제외한 모든 JDBC 호출 정보를 로그 출력, 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 권장 안함. -->
<!-- ResultSet : select의 실행 결과 -->
<logger name="jdbc.audit" level="OFF" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<!-- ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다. -->
<logger name="jdbc.resultset" level="OFF" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<!-- SQL 결과 조회된 데이터의 table로 표현하여 로그 출력 -->
<logger name="jdbc.resultsettable" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<!-- 필수로 들어가야 한다. -->
<root level="ERROR">
<appender-ref ref="STDOUT" />
</root>
</configuration>
쿼리 로그 정렬
log4jdbc.log4j2.properties
# 필수항목
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
# 선택항목 (sql 쿼리를 몇 줄 출력?) 0 : 전체 sql 쿼리문 노출
log4jdbc.dump.sql.maxlinelength=0
# 드라이버 자동 로딩 취소
#log4jdbc.auto.load.popular.drivers=false
log4jdbc.log4j2.properties
0.00MB
데이터베이스 인코딩 확인


728x90
'Back - end > SPRINGBOOT' 카테고리의 다른 글
| [ SpringBoot / Gradle ] 빌드 관리 도구 Gradle과 Maven (Gradle 설치) (0) | 2023.09.04 |
|---|---|
| 23.06.13 / thymeleaf - 레이아웃 라이브러리 (0) | 2023.06.13 |
| 23.06.12 / Thymeleaf 플러그인 설치(Thymeleaf 자동 완성) (0) | 2023.06.12 |
| 23.06.12 / 스프링부트 JRE 경로 설정, Maven build(설정과 테스트 오류), 라이브러리 충돌 (0) | 2023.06.12 |
| 23.06.01 / Spring Boot 설치 및 기본설정 (0) | 2023.06.01 |

