로그의 종류에는
log.debug("OK1");
log.info("OK2");
log.error("OK3");
debug, info, error 이렇게 3가지 종류가 있다.
application.yml 에서 로그 설정하는법은 밑에와 같다.
logging:
file:
name: logs/app.log
level:
root: info
logs/app.log 파일로 저장하게 하고
level : root: info로 info 이상만 로그에 찎히게 한다.
debug > info > error 순서이므로 위 상황에선 info와 error만 나온다.
하지만 모든성공로그와, 실패로그가 똑같은 곳에 나오게된다. 그래서 날짜별로 성공로그와, 실패로그를 따로 관리하기 위해 설정을 해보도록 하겠다.
전체적인 코드는 이렇다.
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- console 로그 관련 설정 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm} %logger{36}-%msg%n
</pattern>
</encoder>
</appender>
<!-- 정상 로그 관련 설정 -->
<!-- 로깅에서 rolling 는 날짜가 변함에 따라 별도의 파일 생성하는 것-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss} %logger{36}-%msg%n
</pattern>
</encoder>
<!-- 정책-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!-- 에러 로그 관련 설정 -->
<appender name="ERROR_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/app-error.log</file>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss} %logger{36}-%msg%n
</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!-- info 로그의 경우 정상 log 파일로 분리-->
<root level="info">
<!-- console 출력과, 정상 log파일에 log내용 추가 -->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</configuration>
<pattern>
%d{yyyy-MM-dd HH:mm:ss} %logger{36}-%msg%n
</pattern>
이것은 메세지 패턴이다. 로그에 찎히는 메세지 형식을 커스텀 해주는 식이다.
한 개의 appender 파트를 떼 봐서 봐보겠다.
- 에러시 에러 로그를 따로 관리하는것이다.
<appender name="ERROR_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/app-error.log</file>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss} %logger{36}-%msg%n
</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
filter 안에서 로그 이벤트를 필터링 하는데 사용한다.
레벨은 error 이고 필터가 일치할 경우에만 허용한다.
로그 파일의 위치를 logs/ app-error.log 이다.
rollingPolicy는 로그파일의 롤링 정책이다.
즉 로그파일 이 어떻게 생겼는지이다. 저 파일네임패턴을 적용해두면 app.2024.02.02.log 형식으로 생기게된다
이런식으로 형성이된다.
app.log 와, app-error.log는 오늘 날짜이다. 내일 실행시키면 저것도 날짜로 바뀌어져있다.
- 성공로그
- 실패 로그
이렇게 성공로그와 실패로그를 level 을 설정해 따로 관리할 수 있으므로 추후 프로젝트때 에러 로그를 기록할 수 있게 된다.
지금 당장은 굳이 필요한가? 싶지만 나중에 원하는 에러로그를 찾을때 에러로그만 모여둔 곳에서 찾으면 되기 때문에 사용하는게 좋을 것 같다.
댓글