먼저 로그를 사용하는 이유부터 살펴보자.. 크게 아래의 두가지 이유와 같을 것이다.
- 대게 에러가 발생했을 때 해당 내용을 알아보고 재현하기 위해서 사용
- 별도의 파일로 남겨서 내용을 분석하기 위해 로그를 사용
- 로그 수준은 크게 (TRACE < DEBUG < INFO < WARN < ERROR)로 구분되며 오른쪽으로 갈수록 더 높은 레벨이며 상세하다.
- 출력 레벨의 설정에 따라서 그 레벨 이상의 로그를 출력한다. ex) INFO 로 설정할 경우 TRACE, DEBUG 레벨은 무시
logback에 대하여?
- slf4j의 구현체로 스프링 부트의 기본 로그 객체이다.
- spring-boot-starter-web 라이브러리에 logback-classic, logback-core가 탑재되어 있음
- log4j, log4j2 에 비해 logback 성능이 좋다.
- 특정로그를 콘솔을 통해 출력하거나 파일을 통해서 남길 수 있다.
간단한 수준의 콘솔에서 로그를 수정하는 것은 설정파일(.yml)을 통해 수정이 가능하다.
// application.yml
logging:
level:
org.springframework: INFO
org.springframework.web: DEBUG
하지만 실제로 사용하기에는 세부내용을 설정하기가 힘들다.
- 보통 별도의 설정파일 logback-spring.xml 파일을 통해 세부내용을 설정하여 사용한다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOGS_ABSOLUTE_PATH" value="./logs" />
<!-- Console에 로그를 기록 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<!-- 파일에 로그를 기록 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS_ABSOLUTE_PATH}/logback.log</file>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOGS_ABSOLUTE_PATH}/logback.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 로그 파일의 최대 용량 -->
<maxFileSize>5MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그의 최대 생명주기(일) 30일지나면 해당일 지난 파일은 삭제됨 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!--
root 레벨 설정
전역적인 설정
-->
<root level="INFO">
<appender-ref ref="Console" />
</root>
<!--
org.springframework.web 하위 동작하는 디버그 로그를 콘솔, 파일에 출력
지역적인 설정
-->
<logger name="org.springframework.web" level="DEBUG">
<appender-ref ref="Console" />
<appender-ref ref="FILE" />
</logger>
</configuration>
logback-spring.xml 설정파일에서는 크게 appender과 logger로 나눌 수 있다.
- appender는 콘솔, 파일 등의 로그를 출력하는 방법을 지정
- logger는 출력할 곳을 설정한다.
- 아래는 로그가 찍힐 때 기록하는 내용을 보여준다.
// 콘솔에 출력되는 내용
[2021-04-07 23:00:35:17226][http-nio-8085-exec-1] INFO LogService - Info
[2021-04-07 23:00:35:17226][http-nio-8085-exec-1] WARN LogService - Warn
[2021-04-07 23:00:35:17226][http-nio-8085-exec-1] ERROR LogService - Error
// 파일에 기록되는 내용
[2021-04-07 23:00:35:17245][http-nio-8085-exec-1] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'text/html', given [text/html, application/xhtml+xml, image/avif, image/webp, image/apng, application/xml;q=0.9, application/signed-exchange;v=b3;q=0.9, */*;q=0.8] and supported [text/plain, */*, text/plain, */*, application/json, application/*+json, application/json, application/*+json]
[2021-04-07 23:00:35:17245][http-nio-8085-exec-1] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'text/html', given [text/html, application/xhtml+xml, image/avif, image/webp, image/apng, application/xml;q=0.9, application/signed-exchange;v=b3;q=0.9, */*;q=0.8] and supported [text/plain, */*, text/plain, */*, application/json, application/*+json, application/json, application/*+json]
[2021-04-07 23:00:35:17246][http-nio-8085-exec-1] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing ["console log"]
[2021-04-07 23:00:35:17246][http-nio-8085-exec-1] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing ["console log"]
[2021-04-07 23:00:35:17256][http-nio-8085-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK
[2021-04-07 23:00:35:17256][http-nio-8085-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK
참고한 블로그
https://www.sangkon.com/hands-on-springboot-logging/
https://goddaehee.tistory.com/206
'Dev > Spring Boot' 카테고리의 다른 글
스프링부트 라이브러리(JPA) 편 (0) | 2021.04.25 |
---|---|
스프링부트가 제공하는 라이브러리 살펴보기! (0) | 2021.04.25 |
스프링 시큐리티 로그인 인증 그 후... (0) | 2020.12.02 |
스프링 시큐리티 적용 (CSRF) (0) | 2020.11.19 |
@Valid로 유효성 체크하기 (0) | 2020.11.15 |