728x90
이전글들에서 로그백설정으로 로그를 나오게 해봤습니다.
하지만 개발을 하다보면 커스텀하게 1에서는 ~~ 이렇게 로그를 찍고 싶고 2에서는 !!! 이렇게 로그를 찍고 싶은 상황이 있을 것입니다. 그 상황에 맞춰서 로그백을 설정하는 법을 알아보겠습니다.
logback-spring-prod.xml
<included>
<property resource="logback-variables.properties" />
<appender name="REQUEST1" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/request1.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/archive/request1.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<maxFileSize>1KB</maxFileSize> <!-- 로그파일 최대 크기 -->
<maxHistory>30</maxHistory> <!-- 로그파일 최대 보관주기 (단위 : 일) -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>
[REQUEST1] ${LOG_PATTERN}
</pattern>
<outputPatternAsHeader>true</outputPatternAsHeader>
</encoder>
</appender>
<appender name="REQUEST2" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/request2.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/archive/request2.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<maxFileSize>10KB</maxFileSize> <!-- 로그파일 최대 크기 -->
<maxHistory>30</maxHistory> <!-- 로그파일 최대 보관주기 (단위 : 일) -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>
[REQUEST1] ${LOG_PATTERN}
</pattern>
<outputPatternAsHeader>true</outputPatternAsHeader>
</encoder>
</appender>
<appender name="MDC" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/mdc.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/archive/mdc.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<maxFileSize>10KB</maxFileSize> <!-- 로그파일 최대 크기 -->
<maxHistory>30</maxHistory> <!-- 로그파일 최대 보관주기 (단위 : 일) -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>
[MDC] %X{job}%n
</pattern>
<outputPatternAsHeader>true</outputPatternAsHeader>
</encoder>
</appender>
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/error.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/archive/error.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<maxFileSize>10KB</maxFileSize> <!-- 로그파일 최대 크기 -->
<maxHistory>30</maxHistory> <!-- 로그파일 최대 보관주기 (단위 : 일) -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>
[ERROR] ${LOG_PATTERN}
</pattern>
<outputPatternAsHeader>true</outputPatternAsHeader>
</encoder>
</appender>
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/warn.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/archive/warn.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<maxFileSize>10KB</maxFileSize> <!-- 로그파일 최대 크기 -->
<maxHistory>30</maxHistory> <!-- 로그파일 최대 보관주기 (단위 : 일) -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>
[WARN] ${LOG_PATTERN}
</pattern>
<outputPatternAsHeader>true</outputPatternAsHeader>
</encoder>
</appender>
<appender name="QUERY" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/query.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/archive/query.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<maxFileSize>10KB</maxFileSize> <!-- 로그파일 최대 크기 -->
<maxHistory>30</maxHistory> <!-- 로그파일 최대 보관주기 (단위 : 일) -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>
[QUERY] ${LOG_PATTERN}
</pattern>
<outputPatternAsHeader>true</outputPatternAsHeader>
</encoder>
</appender>
<root level="INFO">
<!-- <appender-ref ref="REQUEST1" />-->
<!-- <appender-ref ref="REQUEST2" />-->
<!-- <appender-ref ref="MDC" />-->
<!-- <appender-ref ref="ERROR" />-->
<!-- <appender-ref ref="WARN" />-->
</root>
<logger name="SQL_LOG1" level="INFO" additivitty="false">
<appender-ref ref="QUERY" />
</logger>
<logger name="com.example.logback.controller" level="INFO" additivitty="false">
<appender-ref ref="QUERY" />
</logger>
<logger name="SQL_LOG2" level="INFO" additivitty="false">
<appender-ref ref="QUERY" />
</logger>
</included>
기본적인 설정은 이전글들과 같습니다.
appender 를 하나 만들어준뒤 이름을 만들어 주고 컨트롤러에 찍으면 됩니다.
QueryController1
@Slf4j(topic = "SQL_LOG1")
@RestController
public class QueryController1 {
@GetMapping("/query1")
public String query1() {
log.trace("log --> TRACE");
log.debug("log --> DEBUG");
log.info("log --> INFO");
log.warn("log --> WARN");
log.error("log --> ERROR");
return "query1";
}
}
위의 코드를 보시면 logger 를 설정한 name과 @Slf4j의 topic 과 같은 이름으로 해주면 됩니다.
또 다른 방법을 알아보겠습니다.
QueryController2
@RestController
public class QueryController2 {
public static final Logger log = LoggerFactory.getLogger("SQL_LOG2");
@GetMapping("/query2")
public String query1() {
log.trace("log --> TRACE");
log.debug("log --> DEBUG");
log.info("log --> INFO");
log.warn("log --> WARN");
log.error("log --> ERROR");
return "query1";
}
}
이런식으로 Logger를 선언해서 사용할 수 도 있습니다.
하지만 매번 이렇게 @Slf4j에 topic을 달아주거나 Logger를 선언해서 하면 귀찮습니다....
그럴때 logger 의 name을 로그를 찍고 싶은 곳의 패키지를 적어주면 @Slf4j 어노테이션만으로도 로그가 찍힙니다.
728x90
'Spring Boot > Logback' 카테고리의 다른 글
Logback - fileAppender (0) | 2023.01.15 |
---|---|
Logback 설정하기 (0) | 2023.01.15 |
댓글