티스토리 뷰
출처 : romeoh.tistory.com/entry/Spring-Boot-Logback-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0
Spring Boot는 logback이 기본으로 설정되어 있어서 별도로 라이브러리를 추가하지 않아도 됩니다.
spring-boot-starter-web 안에 spring-boot-starter-logging 구현체가 있습니다.
만약 Spring Boot가 아니라면 maven에서 logback 모듈을 추가해줘야 합니다.
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
logback-spring.xml만 작성하여 src/main/resources에 넣으면 되네요
* applicaton.properties파일 설정1
logging.level.root=warn
페이지를 새로고침하면 info 로그는 찍히지 않고 warn이상의 로그만 찍힙니다.
로그레벨의 순서는 아래와 같습니다.
TRACE > DEBUG > INFO > WARN > ERROR
- TRACE : 추적 레벨은 Debug보다 좀더 상세한 정보를 나타냅니다.
- DEBUG : 프로그램을 디버깅하기 위한 정보를 표시합니다. (운영서버에서는 표시하지 않도록 설정함)
- INFO : 상태변경과 같은 정보성 로그를 표시합니다.
- WARN : 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타냄
- ERROR : 요청을 처리하는 중 오류가 발생한 경우 표시합니다.
* applicaton.properties파일 설정2
# logging.level.{패키지 경로}를 통해 로깅 레벨을 결정할 수 있슴
logging.level.wam.app=DEBUG
logging.level.org.hibernate.SQL=DEBUG
<springProfile name="default">
<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>
<!-- 변수 지정 -->
<property name="LOG_DIR" value="C:\\project\\logs\\WAM" />
<property name="LOG_PATH_NAME" value="${LOG_DIR}\\application.log" />
<!-- FILE Appender -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH_NAME}</file>
<!-- 일자별로 로그파일 적용하기 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH_NAME}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%F]%M\(%L\) : %m%n</pattern>
</encoder>
</appender>
<logger name="org.hibernate.SQL" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="org.hibernate.type" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="com.mindone.okch" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</springProfile>
<CASE 1>
[logback-spring.xml]
<logger name="org.hibernate.SQL" level="INFO" additivity="false">
[applicaton.properties]
#logging.level.org.hibernate.SQL=DEBUG
-- [결과]
파일로 로그가 남지 않는다, console에 Hibernate: 로 시작하는 한번의 로그가 보인다. 이것은 아래 설정 때문인 듯
[applicaton.properties]
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
Hibernate:
select
count(tamasstfcl0_.asst_sn) as col_0_0_
from
t_am_asst_fclty tamasstfcl0_
<CASE 2>
[logback-spring.xml]
<logger name="org.hibernate.SQL" level="INFO" additivity="true">
[applicaton.properties]
logging.level.org.hibernate.SQL=DEBUG
-- [결과]
로 변경하면 파일로 로그가 남네요.
엇 설정 우선순위가.. logback-spring.xml에서는 level="INFO"이지만 applicaton.properties파일 설정 DEBUG가 효과를 발휘했네요. 파일의 출력 형식은 아래와 같아요.
[application.log]
2021-03-31 10:19:09 [DEBUG] [SqlStatementLogger.java]logStatement(144) :
select
count(tamasstfcl0_.asst_sn) as col_0_0_
from
t_am_asst_fclty tamasstfcl0_
console은 4개의 로그가 찍혔네요
[console]
20210331 10:54:46.785 [http-nio-8080-exec-48] DEBUG o.h.SQL -
select
count(tamasstfcl0_.asst_sn) as col_0_0_
from
t_am_asst_fclty tamasstfcl0_
2021-03-31 10:54:46.785 DEBUG 14036 --- [io-8080-exec-48] org.hibernate.SQL :
select
count(tamasstfcl0_.asst_sn) as col_0_0_
from
t_am_asst_fclty tamasstfcl0_
20210331 10:54:46.785 [http-nio-8080-exec-48] DEBUG o.h.SQL -
select
count(tamasstfcl0_.asst_sn) as col_0_0_
from
t_am_asst_fclty tamasstfcl0_
Hibernate:
select
count(tamasstfcl0_.asst_sn) as col_0_0_
from
t_am_asst_fclty tamasstfcl0_
<CASE 3>
[logback-spring.xml]
<logger name="org.hibernate.SQL" level="INFO" additivity="true">로 설정
[application.properties]
#logging.level.org.hibernate.SQL=DEBUG
-- [결과]
파일로그 찍히지 않음. console에 Hibernate: 로 시작하는 한번의 로그
<CASE 4>
[logback-spring.xml]
<logger name="org.hibernate.SQL" level="DEBUG" additivity="true">
<appender-ref ref="FILE"><!-- STDOUT에서 변경 -->
</logger>
[application.properties]
#logging.level.org.hibernate.SQL=DEBUG
-- [결과]
2번의 파일로그. console에 다음과 같이 3번의 로그
2021-03-31 11:24:42.811 DEBUG 29016 --- [nio-8080-exec-3] org.hibernate.SQL :
select
count(tamasstfcl0_.asst_sn) as col_0_0_
from
t_am_asst_fclty tamasstfcl0_
20210331 11:24:42.811 [http-nio-8080-exec-3] DEBUG o.h.SQL -
select
count(tamasstfcl0_.asst_sn) as col_0_0_
from
t_am_asst_fclty tamasstfcl0_
Hibernate:
select
count(tamasstfcl0_.asst_sn) as col_0_0_
from
t_am_asst_fclty tamasstfcl0_
<CASE 5>
[logback-spring.xml]
<logger name="org.hibernate.SQL" level="DEBUG" additivity="true">
<appender-ref ref="FILE"><!-- STDOUT에서 변경 -->
</logger>
[application.properties]
# logging.level.{패키지 경로}를 통해 로깅 레벨을 결정할 수 있음.
#logging.level.wam.app=DEBUG #package 경로 주석처리
#logging.level.org.hibernate.SQL=DEBUG
-- [결과]
2번의 파일로그. console에 다음과 같이 2번의 로그
2021-03-31 14:09:13.151 DEBUG 29016 --- [nio-8080-exec-2] org.hibernate.SQL :
select
count(tamasstfcl0_.asst_sn) as col_0_0_
from
t_am_asst_fclty tamasstfcl0_
Hibernate:
select
count(tamasstfcl0_.asst_sn) as col_0_0_
from
t_am_asst_fclty tamasstfcl0_
<CASE 6>
[logback-spring.xml]
<logger name="org.hibernate.SQL" level="DEBUG" additivity="true">
<appender-ref ref="FILE"><!-- STDOUT에서 변경 -->
</logger>
<logger name="wam.app" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT">
</logger>
<!-- 주석처리 <root level="ERROR">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>-->
[application.properties]
#spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
#logging.level.wam.app=DEBUG #package 경로 주석처리
#logging.level.org.hibernate.SQL=DEBUG
-- [결과]
1번의 파일로그. console에 다음과 같이 2번의 로그
<pattern>
[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n
[2019-08-23 22:59:47:1306][main] INFO c.g.f.FirstProjectApplication - Started FirstProjectApplication in 1.193 seconds (JVM running for 1.665)
%d => 로그 기록시간
%thread => 현재 Thread 이름
%-5level => 로그 레벨, -5는 출력의 고정폭 (5글자)
%logger{35} => 축약된 logger name, 35는 최대 자릿수
%msg => 로그메시지
%n => 줄바꿈
기타
${PID:-} => 프로세스 아이디
%p => 로깅 레벨
%F => 로깅이 발생한 프로그램 파일명
%M => 로깅일 발생한 메소드의 이름
%l => 로깅이 발생한 호출지의 정보
%L => 로깅이 발생한 호출지의 라인 수
%t => 쓰레드 명
%c => 로깅이 발생한 카테고리
%C => 로깅이 발생한 클래스 명
%m => 로그 메시지
%r => 애플리케이션 시작 이후부터 로깅이 발생한 시점까지의 시간
<file>
기록할 파일명과 경로를 설정합니다.
<rollingPolicy class>
ch.qos.logback.core.rolling.TimeBasedRollingPolicy => 일자별 적용
ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP => 일자별 + 크기별 적용
<fileNamePattern>
파일 쓰기가 종료된 log 파일명의 패턴을 지정합니다.
.gz나 .zip으로 자동으로 압축할 수도 있습니다.
<maxFileSize>
최대 파일 용량 (최대 10MB 내외 권장)
<maxHistory>
최대 파일 생성 갯수 (
<root> 와 <logger>
root는 logger와 같고, 최상위 패키지에 기본적으로 적용한다.
'Skill > spring' 카테고리의 다른 글
[spring] devtools (0) | 2021.04.13 |
---|---|
logback-spring.xml 설정 (0) | 2021.04.02 |
[maven] pom.xml Packaging jar -> war (0) | 2021.03.17 |
[maven] spring maven 프로젝트로 보이지 않을 때 (0) | 2021.03.17 |
[spring] 파일업로드 fileupload (0) | 2021.03.06 |
- Total
- Today
- Yesterday
- spring
- Javascript
- CSS
- PostgreSQL
- @ExceptionHandler
- draw.io
- element위치
- Keycode
- DatePicker
- 정규식
- sumifs
- object key
- $.each
- 진열사랑
- caniuse
- 여러 컬럼 update
- excel
- setter
- devtools
- getter
- springboot
- QueryDSL
- border-collapse
- JQuery
- ul li로 테이블
- 프로젝트명변경
- $.extend
- 전후방탐색
- oracle
- lombok
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |