Development/Spring
[Spring] slf4j를 이용한 spring logging
hyelie
2022. 10. 5. 10:33
로그의 목적은 아래 2가지 정도가 있다.
- 서비스 동작 상태 파악
- 장애 파악 및 알림
logging은 slf4j 등 로그 라이브러리를 사용할 것이다.
로그 레벨
- fatal : 어플리케이션 종료까지 만드는 error.
- error : 의도하지 않은 오류 발생, 종료는 안 됨.
- warn
- info : 서비스 동작 상태
- debug : 개발자가 보기 위한 것
- trace
인데, '의도하지 않은 에러'를 나타내는(ex. database connection error) error, 기록을 남기기 위한 info 2개를 사용하면 될 것 같다. 또 로그는 파일로 작성할 거고, 너무 많이 쌓이면 다른 것으로 빼 주어야 한다.
https://victorydntmd.tistory.com/173?category=698080
위 블로그에서 가져왔다.
일단 의존성 추가해 준다.
build.gradle
implementation 'org.slf4j:slf4j-api'
implementation 'ch.qos.logback:logback-classic'
다음으로 resources에 log를 어떻게 쓸지에 대한 data를 넣어야 한다.
main/resources/logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 콘솔로 로그를 남김 -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<!-- 로그 메시지 패턴 -->
<Pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n
</Pattern>
</encoder>
</appender>
<!-- 파일로 로그를 남김 -->
<appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>.\Logs\data.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n
</Pattern>
</encoder>
<!-- 로그를 남기는 파일의 용량이 10KB가 넘으면 이를 압축 파일로 만들고 새로 로그 파일로 만들라는 정책 -->
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10KB</MaxFileSize>
</triggeringPolicy>
<!-- 파일을 덮어쓰는 정책 -->
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<FileNamePattern>.\Logs\data.%i.log.zip</FileNamePattern>
<!--
MinIndex가 1이고, MaxIndex가 10이므로, 위의 파일 이름 패턴에 따라 아래의 로그 파일이 생길 것이다.
logexample2.1.log.zip logexample2.2.log.zip .... logexample2.10.log.zip
이 상태에서 또 10KB가 넘으면 logexample2.1.log.zip이 된다.
-->
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
</appender>
<!--
com.bizkicks.backend 아래 패키지 로그들만 consoleAppender, fileAppender 방법으로 로그를 남긴다.
info 이상의 레벨의 log만 남긴다.
-->
<logger name="com.bizkicks.backend" level="info" additivity="false">
<appender-ref ref="fileAppender" />
</logger>
<!-- root는 글로벌 로거를 의미하며, 위의 logger에 해당하지 않으면 root 로거가 실행된다. -->
<root level="warn">
<appender-ref ref="consoleAppender" />
</root>
</configuration>
이후 slf4j annotation을 붙이고 log.info 또는 log.error를 사용하면 된다.
@Slf4j
public class MyClass{
public void MyFunction(){
...
log.info("info log");
log.error("error log");
...
}
}