티스토리 뷰
2020/05/13 - [framework/Springboot] - spring 프로젝트에서 springboot 프로젝트로 migration 하기 (1) - pom.xml
2020/05/13 - [framework/Springboot] - spring 프로젝트에서 springboot 프로젝트로 migration 하기 (2) - web.xml
2020/05/14 - [framework/Springboot] - spring 프로젝트에서 springboot 프로젝트로 migration 하기 (3) - 파일 추가 및 변경
중요한 전환은 이제 다 마쳤고 이제 springboot에서 logback을 사용하는 방법에 대해 알아보자.
AS-IS framework에서도 logging framework는 logback을 사용하고 있었다. 그렇기에 logback 내부의 설정은 바꿀 부분이 없었다. 앞서 spring-boot-starter-web 라이브러리를 추가해서 그 안에 내장되어 있는 spring-boot-starter-logging 라이브러리 안에 logback이 있어서 기존에 설정해 놨던 logback 관련 라이브러리를 지워야 했다.
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</dependency>
</dependencies>
spring-boot-starter-logging 안에는 위와 같은 dependency 들이 있다. 즉 logback을 사용할거면 로그 관련된 dependency를 하나도 넣지 않아도 알아서 설정이 다 된다.
springboot는 logback-spring.xml 이라는 파일이 있으면 logback-spring.xml을 바라보고 없으면 application.properties 안에 로그 관련 설정이 들어있나 본다. 즉 log 관련 설정파일이 꼭 필요한건 아니다. springboot에서 제공하는 기본 로그 설정은 org.springframework.boot.logging.logback 안에 base.xml 파일을 바라본다.
base.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Base logback configuration provided for compatibility with Spring Boot 1.1
-->
<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
logback-spring.xml 파일이 없다면 위 파일을 기본적인 logging 설정 파일로 판단하고 이에 대한 제어는 application.properties에서 할 수 있다. application.properties에도 logging 설정을 하지 않는다면 base.xml 에 정의된대로 log level은 INFO 로 기본 로그를 출력하게 된다. 다른 log 설정을 application.properties에서 하는 방법을 보자.
application.properties log 설정
Spring Environment |
System Property |
Comments |
logging.exception-conversion-word |
LOG_EXCEPTION_CONVERSION_WORD |
The conversion word used when logging exceptions. |
logging.file.clean-history-on-start |
LOG_FILE_CLEAN_HISTORY_ON_START |
Whether to clean the archive log files on startup (if LOG_FILE enabled). (Only supported with the default Logback setup.) |
logging.file.name |
LOG_FILE |
If defined, it is used in the default log configuration. |
logging.file.max-size |
LOG_FILE_MAX_SIZE |
Maximum log file size (if LOG_FILE enabled). (Only supported with the default Logback setup.) |
logging.file.max-history |
LOG_FILE_MAX_HISTORY |
Maximum number of archive log files to keep (if LOG_FILE enabled). (Only supported with the default Logback setup.) |
logging.file.path |
LOG_PATH |
If defined, it is used in the default log configuration. |
logging.file.total-size-cap |
LOG_FILE_TOTAL_SIZE_CAP |
Total size of log backups to be kept (if LOG_FILE enabled). (Only supported with the default Logback setup.) |
logging.pattern.console |
CONSOLE_LOG_PATTERN |
The log pattern to use on the console (stdout). (Only supported with the default Logback setup.) |
logging.pattern.dateformat |
LOG_DATEFORMAT_PATTERN |
Appender pattern for log date format. (Only supported with the default Logback setup.) |
logging.pattern.file |
FILE_LOG_PATTERN |
The log pattern to use in a file (if LOG_FILE is enabled). (Only supported with the default Logback setup.) |
logging.pattern.level |
LOG_LEVEL_PATTERN |
The format to use when rendering the log level (default %5p). (Only supported with the default Logback setup.) |
logging.pattern.rolling-file-name |
ROLLING_FILE_NAME_PATTERN |
Pattern for rolled-over log file names (default ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz). (Only supported with the default Logback setup.) |
PID |
PID |
The current process ID (discovered if possible and when not already defined as an OS environment variable). |
[출처 : https://docs.spring.io/]
spring 공식 사이트에서는 복잡하게 되어 있고 다양하게 응용해서 쓸수 있지만 실제로는 application.properties 에서 간단히 사용할 목적이라면 다음 정도만 작성을 해서 쓰고 아니면 logback-spring.xml 을 사용한다.
logging.file=logs/application.log
logging.level.org.apache=INFO
logging.level.abc=debug
logging.level.org.springframework=INFO
logging.config=classpath:logback/logback.xml
왜 기존의 logback.xml을 쓰지 않고 logback-spring.xml이라고 이름을 붙였을까?
예전 logback을 사용할 경우는 WAS를 기동하면 logback을 먼저 실행하고 spring을 실행했기 때문에 logback 설정 내에서 spring profile 등의 spring 기능을 이용을 할 수 없었다. 그래서 전에 이런 글도 썼었다.
기동 시점의 차이를 극복하고자 springboot에서는 logback-spring.xml 파일을 읽어 들일수 있도록 하였고 그로 인해 spring profile이나 application.properties 파일도 이제는 logback에서 사용을 할 수가 있게 되었다. 따라서 위의 'Logback에서 spring profile을 적용하기' 처럼 janino lib를 추가할일도 저렇게 사용할 일도 없게 되었다.
그럼 이제는 어떻게 spring profile을 적용할 수 있을까? 다음과 같이 간단하게 적용할 수 있다.
<?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>
<springProfile name="local"> 만 집어 넣으면 된다. (너무편리) 나머지 모든 설정은 기존의 logback을 쓰는 설정과 동일하다.
logback-spring.xml에 위에서 언급한대로 application.properties의 값도 가지고 올수가 있는데 방법은 다음과 같다.
<springProperty name="logFileName" source="log.file.name"/>
... 중략 ...
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${logFileName}</file>
... 중략 ...
</file>
기존에는 기동 시점때문에 불가능하거나 어려웠던 것들이 매우 간편해졌다. 유용하게 잘 쓸수 있을것 같다.
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (1) - pom.xml
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (2) - web.xml
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (3) - 파일 추가 및 변경
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (4) - logback
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (5) - 빌드 및 실행
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (6) - XML config to JAVA
'Framework > Spring' 카테고리의 다른 글
Spring Transaction Propagation을 예제를 통해 알아보자 (1) | 2020.05.21 |
---|---|
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (5) - 빌드 및 실행 (0) | 2020.05.15 |
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (3) - 파일 추가 및 변경 (0) | 2020.05.14 |
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (2) - web.xml (5) | 2020.05.13 |
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (1) - pom.xml (8) | 2020.05.13 |