로그의 목적은 아래 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"); ... } }
'Development > Spring' 카테고리의 다른 글
[Spring] Spring image 업로드 / 다운로드(리턴) / 인코딩 (0) | 2022.10.05 |
---|---|
[Spring] Spring exception handler 추가 - ambiguous handler (0) | 2022.10.05 |
[Spring + Swagger] Swagger 사용 (0) | 2022.10.05 |
[Spring] Custom Exception Handler (0) | 2022.10.05 |
[Spring + Jwt] Spring Boot + Spring Security + Redis + Jwt를 이용한 회원가입 및 로그인 (0) | 2022.10.05 |