티스토리 뷰

 

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 기능을 이용을 할 수 없었다. 그래서 전에 이런 글도 썼었다. 

 

Logback에 spring profile을 적용하기

logback에 spring profile을 왜 적용하는가? 이유는 간단하다. 하나의 파일만 만들기 위해서다. spring profile을 적용하지 않는다면 logback.xml 하나만 있어도 될걸 logback-dev.xml, logback-prd.xml 등등 각 P..

oingdaddy.tistory.com

기동 시점의 차이를 극복하고자 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

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31