티스토리 뷰
필자는 xml로 설정하는 방식이 익숙한 사람이었는데 점점 이런 xml 파일로 설정하는 부분들이 없어지고 이는 다른 부분으로 대체가 되고 있다. java config라던지 application.yml 파일에 기존에 xml로 설정하던 부분들을 대체할 수 있게 되었고 사용하다보니 이것도 매우 편리했다. 얼마전에 MyBatis 관련된 설정도 application.yml 파일에서 설정을 했는데 이와 마찬가지 맥락으로 logback.xml (or logback-spring.xml) 파일에 대해서도 application.yml 파일에서 설정이 가능하다.
AS-IS (logback-spring.xml)
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<springProfile name="local">
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%d{HH:mm:ss.SSS}][%-5level][%logger{36}.%method:line%line] - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.springframework" level="info" additivity="false">
<appender-ref ref="console" />
</logger>
<root level="debug">
<appender-ref ref="console" />
</root>
</springProfile>
<springProfile name="dev">
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/abc.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/logs/abc.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[%d{HH:mm:ss.SSS}][%-5level][%logger.%method:line%line] - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.springframework" level="info" additivity="false">
<appender-ref ref="file" />
</logger>
<root level="info">
<appender-ref ref="file" />
</root>
</springProfile>
</configuration>
logback 설정을 하는 xml 이다. 이 부분들은 다음 Common Application Properties 를 참고해 application.yml (or application.properties) 로 변경할 수 있다.
Key | Default Value | Description |
logging.charset.console | Charset to use for console output. | |
logging.charset.file | Charset to use for file output. | |
logging.config | Location of the logging configuration file. For instance, `classpath:logback.xml` for Logback. | |
logging.exception-conversion-word | %wEx | Conversion word used when logging exceptions. |
logging.file.name | Log file name (for instance, `myapp.log`). Names can be an exact location or relative to the current directory. | |
logging.file.path | Location of the log file. For instance, `/var/log`. | |
logging.group.* | Log groups to quickly change multiple loggers at the same time. For instance, `logging.group.db=org.hibernate,org.springframework.jdbc`. | |
logging.level.* | Log levels severity mapping. For instance, `logging.level.org.springframework=DEBUG`. | |
logging.logback.rollingpolicy.clean-history-on-start | false | Whether to clean the archive log files on startup. |
logging.logback.rollingpolicy.file-name-pattern | ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz | Pattern for rolled-over log file names. |
logging.logback.rollingpolicy.max-file-size | 10MB | Maximum log file size. |
logging.logback.rollingpolicy.max-history | 7 | Maximum number of days archive log files are kept. |
logging.logback.rollingpolicy.total-size-cap | 0B | Total size of log backups to be kept. |
logging.pattern.console | %clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} | Appender pattern for output to the console. Supported only with the default Logback setup. |
logging.pattern.dateformat | yyyy-MM-dd HH:mm:ss.SSS | Appender pattern for log date format. Supported only with the default Logback setup. |
logging.pattern.file | %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} | Appender pattern for output to a file. Supported only with the default Logback setup. |
logging.pattern.level | %5p | Appender pattern for log level. Supported only with the default Logback setup. |
logging.register-shutdown-hook | false | Register a shutdown hook for the logging system when it is initialized. |
이런 표를 토대로 매핑을 시켜보면 다음과 같이 application.yml 로 변경을 시킬 수 있다.
2021.07.02 수정
다른 기능은 문제가 없었으나 rolling-file-name이 spring docs에 있는 내용으로 해도 정상동작을 하지 않았다. rolling-file-name을 동작하게 하려면 다음과 같이 사용해야 한다.
TO-BE (application.yml)
spring:
profiles: local
logging:
pattern:
console: "[%d{HH:mm:ss.SSS}][%-5level][%logger.%method:line%line] - %msg%n"
level:
org:
springframework: DEBUG
---
spring:
profiles: dev
logging:
pattern:
file: "[%d{HH:mm:ss.SSS}][%-5level][%logger.%method:line%line] - %msg%n"
rolling-file-name: "/logs/abc.%d{yyyy-MM-dd}.%i"
file:
name: /logs/abc.log
max-history: 30
level:
org:
springframework: INFO
이렇게 logback.xml 파일에서 정의해서 사용했던 내용들을 springboot의 application.yml 파일에서 간단히 전환할 수 있다.
끝!
'Framework > Spring' 카테고리의 다른 글
Springboot 2.1, 2.2, 2.3, 2.4, 2.5 migration history (0) | 2021.05.26 |
---|---|
Springboot + MyBatis 초간단 Paging 처리하기 (with. PageHelper) (3) | 2021.05.24 |
Springboot Graceful Shutdown (since 2.3) (0) | 2021.04.28 |
Springboot 프로젝트에서 mvnw, mvnw.cmd 는 무엇일까? (0) | 2021.04.27 |
Springboot @RestControllerAdvice 사용해 Exception 처리하기 (0) | 2021.04.27 |
댓글