우리 팀의 로깅 전략 - woowacourse-teams/2021-gpu-is-mine GitHub Wiki
- HTTP 요청, 응답 -> Console
- Info 레벨 이상의 정보, DB access 정보 -> logs/log.log
- 서버 에러 정보 -> logs/err_log.log
logback 설정 파일로 로그를 출력하는 위치, 출력할 로그 레벨, 출력 패턴을 지정한다. 스프링 부트의 기본 logback 설정 파일 위치는 'resource/logback-spring.xml' 이다.
발생한 로깅을 지정한 출력 레벨, 패턴, 위치에 따라 출력한다. 프로젝트에서 사용한 Appender 구현체는 ConsoleAppender, RollingFileAppender 두 가지인데, 각각 Console과 File에 출력한다.
ex,ConsoleAppender 예시
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%-5level %d{yy-MM-dd HH:mm:ss} [%logger{0}:%line] - %msg%n</pattern>
</encoder>
</appender>
<!-- 출력 예시 : INFO 21-07-08 20:47:52 [DocumentationPluginsBootstrapper:160] - Context refreshed -->
ex, RollingFileAppender 예시
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>logs/error.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 -->
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
<fileNamePattern>logs/error.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- 파일당 최고 용량 kb, mb, gb -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy> <!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
<maxHistory>60</maxHistory>
</rollingPolicy>
</appender>
로깅의 정도를 설정하고, Application에서 받은 로그 중 Appender가 어떤 레벨까지 처리할 것인지를 정한다.
예를 들면 아래 예시에서 logging 레벨을 info로 하는 경우, info, error 모두 로깅되고, logging 레벨을 error로 하는 경우 error만 로깅된다.
public class TestApplication {
static final Logger logger = LoggerFactory.getLogger(TestApplication.class);
public void test() {
logger.error("error");
logger.info("info");
}
// 레벨 순서 : TRACE < DEBUG < INFO < WARN < ERROR
}
ex, Logging level 지정 예시 (application.properties)
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
logging.level.root=error
ex, Logger level 지정 예시 (logback-spring.xml)
<!-- ERROR Level 이상의 로깅 정보를 CONSOLE 이라는 이름을 가진 Appender로 처리한다. -->
<root level="ERROR">
<appender-ref ref="CONSOLE"/>
</root>
단, logback 설정 파일에서 지정한 로깅 레벨보다, application 설정 파일로 지정한 레벨이 우선 순위가 높은 것으로 생각된다.