회사에서 System.out.println 보다 debug 쓰는게 너무 편리하고
개발서버나 운영서버에서 로그를 볼 수 있기 때문에
미루던 로그 설정을 해보려고 한다.
https://awse2050.tistory.com/72
https://goddaehee.tistory.com/206
위 블로그들 설명이 아주 자세하다.
https://zzang9ha.tistory.com/399
이 블로그는 hibernate 로그 설명이 잘 되어있다.
yml 으로도 설정 할 수 있지만 logback-spring.xml을 생성해서 설정하겠다.
결론적으로는 어떤 것을 사용해도 아무 문제가 없고, 기본적인 구조는 비슷하기 때문에 편한 것을 사용하면 되겠다. 개인적으로는 yml을 사용하는 것이 더 구조를 파악하기 쉽고, 중복되는 코드가 줄어들기 때문에 yml을 사용하는 것이 더 좋다고 생각한다.
주의할 점은 properties와 yml을 함께 사용하면 properties 파일이 우선순위가 높아 yml 파일에서 설정한 내용이 덮어씌워질 수 있다는 점이다. 따라서 되도록이면 둘 중 한쪽만 사용하는 것이 권장된다.
위 블로그들을 참고해서 내 입맛에 맞는 로그파일 설정을 해주었다.
- [날짜/날짜_시간_log.log] 형태로 로그파일을 생성
1. application.yml 설정
spring:
profiles:
active: ${profile}
jpa:
properties:
hibernate:
show_sql: false # true=>콘솔에 표시
format_sql: true # 쿼리 들여쓰기 등 포맷에 맞춰 표출
use_sql_comments: true # 주석 표시
#########################################
logging:
level:
root: WARN
com:
(프로젝트 패키지명): DEBUG
#org:
# springframework:
# boot:
# autoconfigure: WARN
# beans:
# factory:
# support:
# DefaultListableBeanFactory: WARN
hibernate:
sql: DEBUG
type:
descriptor:
sql: trace # 파라미터 값 표출
spring:jpa:properties:hibernate:show_sql과
logging:level:hibernate:sql 의 차이점은
전자는 콘솔에 찍히는 것이고, 후자는 로그로 찍히는 것이다.
show_sql=true로 하고선 왜 콘솔에 sql문이 두 번 찍혔나 했었는데 그 이유 때문이었다.
로그 파일에 남길 예정이므로 shoq_sql=false로 설정한다.
또, 로그 설정한 후 엄청난 양의 디버그가 찍혔는데 다 필요 없는 내용이라 안보이게 하기 위해
로그 레벨을 WARN 으로 해주었다.
일일이 지정해 주어도 되지만
아예 root를 WARN으로 지정해주고, 필요한 로그만 레벨을 설정해 주었다.
2. logback-spring.xml 생성
logback-spring.xml 파일을 생성하기 앞서
profile 별 로그 설정을 다르게 해주어야 하기 때문에
logback-local.properties 와 logback-prod.properties 를 만들 것이다.
· logback-local.properties
#로그파일 경로
log.config.path=D://log
#로그파일 이름
log.config.filename=log
#로그 레벨
log.config.level=DEBUG
· logback-prod.properties
#로그파일 경로
log.config.path=/log
#로그파일 이름
log.config.filename=log
#로그 레벨
log.config.level=INFO
· logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 15초마다 설정 파일의 변경을 확인 하여 변경시 갱신하려면 configuration scan="true" scanPeriod="15 seconds" -->
<configuration >
<!-- application.yml 파일에서 spring.profiles.active 가져오기 -->
<springProperty name="profile" source="spring.profiles.active" defaultValue=""/>
<!-- profile 별 로그 설정 -->
<property resource="logback-${profile}.properties"/>
<!-- log file path -->
<timestamp key="BY_DATE" datePattern="yyyyMMdd"/>
<timestamp key="BY_TIME" datePattern="HH"/>
<property name="LOG_PATH" value="${log.config.path}"/>
<!-- log file name -->
<property name="LOG_FILE_NAME" value="${log.config.filename}"/>
<!-- err log file name -->
<property name="ERR_LOG_FILE_NAME" value="${error.log.config.filename}"/>
<!-- log level filter -->
<property name="LOG_LEVEL" value="${log.config.level}"/>
<!-- log pattern -->
<property name="LOG_PATTERN" value="%-5level %d{yy-MM-dd HH:mm:ss} [%thread] [%logger{0}-%M:%line] - %msg%n "/>
<!-- Console Appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- File Appender -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 파일경로 설정 -->
<file>${LOG_PATH}/${BY_DATE}/${BY_DATE}_${LOG_FILE_NAME}.log</file>
<!-- 지정한 로그 레벨보다 같거나 높은 수준의 로그 레벨에 대해서는 로그를 처리. 지정한 로그 레벨보다 낮은 수준의 로그는 거부 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${LOG_LEVEL}</level>
</filter>
<!-- 출력패턴 설정-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<append>true</append>
<!-- Rolling 정책 (파일 관리설정) -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
<fileNamePattern>${LOG_PATH}/%d{yyyyMMdd}/%d{yyyyMMdd}_${LOG_FILE_NAME}_%i.log</fileNamePattern>
<!-- 파일 크기 지정할떄 사용 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량 kb, mb, gb -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
<maxHistory>10</maxHistory>
<!--<MinIndex>1</MinIndex> <MaxIndex>10</MaxIndex>-->
</rollingPolicy>
</appender>
<root>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
에러 내용도 전부 한 로그파일에 담을 거라서 별도로 에러 로그 설정을 하지 않았다.
application.profiles.active 에서 지정된 profile을
<springProperty name="profile" source="spring.profiles.active" defaultValue=""/>
profile 에 할당하면
<property resource="logback-${profile}.properties"/>
일일이 logback-spring.xml 파일을 변경해주지 않아도 되고,
profile 별 설정파일만 수정하면 된다.
'Spring Boot' 카테고리의 다른 글
[JPA] 기본키 자동 생성 전략 AUTO_INCREMENT (0) | 2023.03.23 |
---|---|
[JPA] Persistable 인터페이스 (0) | 2022.11.22 |
[Spring Boot] 개발환경 설정 -(5) mySQL JPA 연동하기-② (0) | 2022.06.30 |
[Spring Boot] 개발환경 설정 -(5) mySQL JPA 연동하기-① (0) | 2022.06.30 |
[Spring Boot] 개발환경 설정 -(4) 응답 객체 생성하기 (0) | 2022.06.02 |