반응형
Logback
위치
- 기본
- 스프링 : /resources/logback.mxl
- 부트 : /resources/logback-spring.xml
- .yml파일에서 설정가능 (profile에 따른 설정도 가능.)
레벨
TRACE < DEBUG < INFO < WARN < ERROR
설정 레벨 이상의 로그를 출력
(.yml파일에서 레벨 설정도 가능)
loggin.level.root: info # 전체
loggin.level.com.xxx.yyy.Class: debug # 패키지별
logback-spring.xml
<configuration>
부에 최대 1개의 <root> 0개 이상의 <appender>와 <logger> 가진다.
설정 파일의 변경을 재시작하지 않고 주기적으로 읽어 올 수 있다.
<configuration scan="true" scanPeriod="60 seconds"> <!--minutes, hours-->
debug="true" -> 로그의 상태 메시지 출력
packagingData="true" -> 패키징 데이터를 검사하고 로깅 (성능 비용 있다)
<property>: 파일내에서 사용할 수 있는 변수 선언
선언한 변수는 ${}으로 사용
<root>, <logger> : 설정한 appender를 참조하여 package와 level설정
- root : 전역 설정
- name이 root인 logger
- level : 로그레벨
- logger : 지역(pachage) 설정
- additivity : root 설정 상속 유무 설정.(default = true)
- name : appender이름
- level : 로그레벨
root와 logger는 <appender-ref ref="">를 통해 appender를 로거에 추가
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<appender name="Address" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/xxx.log</file> <!--파일명, 경로-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level> <!--해당 레벨의 로그만 별도의 필터 설정-->
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<fileNamePattern>logs/xxx_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>50MB</maxFileSize> <!--최대 파일크기 IO성능 영향-->
<maxHistory>30</maxHistory> <!--최대 저장 파일 개수-->
<maxIndex>5</maxIndex>
</rollingPolicy>
<encoder> <!--기본적인 패턴 예제, 추가적인것은 찾아보자-->
<pattern>%d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!--지역-->
<logger name="com.humuson.tasbatch.batch.Address" level="INFO" additivity="false">
<appender-ref ref="Address" />
</logger>
<logger name="org.hibernate" level="ERROR" />
<root level="INFO"> <!--전역-->
<appender-ref ref="CONSOLE" />
<appender-ref ref="RollingFileAppender" />
</root>
<appender> : 형태를 설정, 출력될 대상 설정
- ch.qos.logback.core.ConsoleAppender : 콘솔에 로그
- <encoder>
- <target> -> 보통 System.out 사용
- ch.qos.logback.core.FileAppender : 파일에 로그
- ch.qos.logback.core.rolling.RollingFileAppender : 여러개의 파일을 롤링
- <file>
- <append> : true(이어쓰기,default), false(덮어쓰기)
- <encoder>
- <rollingPolicy>
- <triggeringPolicy> : rollover 활성 시점
- <predent> : <file>이 없고 압축이 불가능한 경우, TimeBasedRollingPolicy에서 사용가능
- ch.qos.logback.classic.net.SMTPAppender : 로그를 메일에 찍어 보낸다.
- ch.qos.logback.classic.db.DBAppender : DB(데이터베이스)에 로그
<rollingPolicy>
- ch.qos.logback.core.rolling.TimeBasedRollingPolicy => 일자별
- <fileNamePattern>
- <maxHistory> : 아카이브에 유지할 파일 개수 (1순위)
- <totalSizeCap> : 아카이브에 유지할 파일의 총 크기 (2순위)
- <cleanHistoryOnStart> : 시작시 로그파일 다 지우고 시작 (default 는 false)
- ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP => 일자별 + 크기별 적용
- ch.qos.logback.core.rolling.FixedWindowRollingPolicy -> fixed window 알고리즘 (파일크기별)
- <fileNamePattern>
- <minIndex>
- <maxIndex>
- <triggeringPolicy>와 함께 사용한다
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>logs/xxx_%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<fileNamePattern> 파일 쓰기가 종료된 log 파일명의 패턴을 지정한다.
.gz나 .zip으로 자동으로 압축할 수도 있다.
<layout>, <encoder>
최근에는 FileAppender가 encoder를 필요로 한다. (layout은 몰라도 된다.)
728x90
반응형
'스프링' 카테고리의 다른 글
스프링 핵심 원리 - (3) (0) | 2022.08.03 |
---|---|
스프링 핵심 원리 - (2) (0) | 2021.09.10 |
스프링 핵심 원리 - (1) (0) | 2021.09.10 |
필터 / 인터셉터 / AOP (0) | 2021.06.28 |
Spring (0) | 2021.06.28 |
댓글