-
Notifications
You must be signed in to change notification settings - Fork 6
Logging
Jaehun Choi edited this page Sep 30, 2022
·
1 revision
로그에는 5 level이 존재한다.
trace, debug, info, warn, error
예를들어 Logging level이 info일 경우 info, warn, error가 로그에 남는다.
우리팀에서는 기본적으로 아래와 같이 로깅을 적용합니다.
- 예상치 못한 예외 ERROR
- 도메인에서 발생하는 인지할 수 있는 에러 WARN
- request, response, 운영에서 유의미한 일반 로그 INFO
- 운영상 필요하지는 않지만 dev 환경에서 점검해볼 수 있는 내용 DEBUG
두 가지 형태로 로그를 작성할 수 있습니다.
//1. X
log.debug("name = " + huni);
//2. O
log.debug("name = {}", huni);
1번과 2번은 똑같은 로그를 생성하지만, 1번 로그는 로깅이 되든, 되지 않든 문자열을 연산하고 huni객체를 toString으로 만듭니다. 2번은 그렇지 않습니다. 따라서 MessageFormat을 사용하는 형태로 작성해야 합니다.
logback관련 xml어디서든 사용할 수 있는 property입니다.
- LOG_PATTERN
pattern = %-5level %d{yy-MM-dd HH:mm:ss}[%thread] [%logger{0}:%M:%line] - %msg%n
ex = INFO 22-09-23 00:08:09[http-nio-8080-exec-4] [LoggingAspect:responseLog:47] - [message]
- LOG_PATH
저장경로 prefix = /home/ubuntu/logs
xml 파일을 Logback에서 읽어와 Logback 설정 클래스에 로딩합니다.
<included>
<!--1-->
<appender name="file-info-logger" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--2-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>[level]</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>${LOG_PATH}/info.log</file>
<!--3-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>utf-8</charset>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!--4-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/info/info-%i.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
</included>
- RollingFileAppender는 로깅 이벤트를 작성하는 Appender의 하위 클래스로, File로 저장하면서 특정 policy로 여러 파일 rolling하며 로그를 작성합니다.
- Level로 filter를 걸어줍니다. 해당 level 이상의 로그만 로깅합니다.
- 로그 패턴을 지정합니다.
- size와 시간으로 rolling 합니다. 최초에 생성된 로그 파일은 3번 위의 file 이름을 따르며, 그 이후에 롤링된 내용은 %i에 index가 생성되며 순차적으로 올라갑니다. (이 때, 새롭게 파일이 추가되면 기존 파일의 제목이 +1 되는 형식)
스프링 부트에서는 텀캣의 request, response를 로깅해줍니다 (body 제외)
implementation 'net.rakugakibox.spring.boot:logback-access-spring-boot-starter:2.7.1'
logback-access 파일을 생성하면 되고 로깅 전략은 아래와 같습니다.
%n###### HTTP Request ###### %n%fullRequest###### HTTP Response ###### %n%fullResponse
spring 실행 환경별로 로그 전략을 구분할 수 있습니다.
<springProfile name="dev"/>
이 파일을 통해 여러 로깅 전략을 작성한 xml을 import 하여 사용할 수 있습니다.
xml에서는 이를 include
라고 사용합니다.
<include resource="logback/file-sql-slow-info-logger.xml"/>
<logger name="com.woowacourse.thankoo" level="DEBUG">
<appender-ref ref="file-debug-logger"/>
<appender-ref ref="file-info-logger"/>
<appender-ref ref="file-warn-logger"/>
<appender-ref ref="file-error-logger"/>
</logger>
이 때, 로그 설정 파일에 지정된 이름으로 appender-ref
를 호출하여 사용합니다.