파란하늘의 지식창고
Published 2019. 1. 9. 08:57
Spring Boot log 설정하기 Study/Java
반응형

Spring Boot는 java util logging, log4j2, logback에 대한 기본 설정을 제공하고 starter를 사용하면 logback를 default로 설정하여 사용한다.

https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-logging

dependency 설정

아래와 같이 설정한다. (만약 spring-boot-starter 를 참조 선언하고 있다면 spring-boot-starter-logging은 기본 참조 되어 있다.)

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
	<groupId>org.codehaus.janino</groupId>
	<artifactId>janino</artifactId>
</dependency>

만약 다른 log libarary를 사용하고 싶다면 아래처럼 기본 log starter를 제외 설정하고 관련 log 설정을 하면 된다.

아래는 log4j2를 사용할 경우의 예이다.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

 

logback-spring.xml 설정

https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-custom-log-configuration

spring boot에서 로그는 properties 파일에 설정하거나 default인 logback의 경우 logback-spring.xml 파일을 설정하여 사용할 수 있다.

logback을 사용하는 경우 좀더 상세한 설정을 할 수 있기 때문에 logback-spring.xml을 설정하는 게 좋다.

 

가장 간단한 설정 예시는 아래와 같다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/base.xml"/>
	<logger name="org.springframework.web" level="INFO"/>
	<logger name="net.bluesky" level="DEBUG"/>
</configuration>

스프링은 logback에 대한 기본적인 설정을 base.xml을 통해 제공해주기 때문에 위와 같이 해당 파일을 include 한다.

spring의 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> 

logabck 을 사용할 경우 appender 설정을 통해 log를 설정한다.

https://logback.qos.ch/manual/appenders.html

다음과 같은 종류의 appender를  제공하고 있으며 얼마든지 확장하여 사용할 수 있다.

appender 종류 설명 
console System.out으로 처리되는 console log 처리
로컬 개발 시 로그 확인을 위해 필요
file file로 로그를 처리
server socket  
SMTP  
db  
syslog  
amqp  

이 중 spring boot는 console과 file에 대한 appender 설정을 기본 제공하고 있다.

위 base.xml의 설정을 보면 root 로그를 console, file로 처리하도록 설정되어 있다.

좀더 자세한 설정을 하고 싶은 경우 logback의 configuration 문서를 참고하면 된다.

기본적으로 가장 많이 하는 설정은 profile별 log level 설정과 appender 설정이다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/base.xml"/>
	<!-- (s) 기본 로그 레벨 값 설정 -->
	<property name="loggerLevelBluesky" value="DEBUG" />
	<property name="loggerLevel" value="INFO" />
	<if condition='p("spring.profiles.active").equals("live")'>
		<then>
			<property name="loggerLevelBluesky" value="INFO" />
			<property name="loggerLevel" value="INFO" />
		</then>
	</if>
	<!-- (e) 기본 로그 레벨 값 설정 -->

	<logger name="net.luversof" level="${loggerLevelBluesky}" />
	<logger name="java.sql" level="${loggerLevel}" />
	<logger name="org.springframework" level="${loggerLevel}" />


	<if condition='p("spring.profiles.active").equals("live")'>
		<then>
			<root level="WARN">
				<appender-ref ref="FILE" />
			</root>
		</then>
		<else>
			<root level="INFO">
				<appender-ref ref="CONSOLE" />
				<appender-ref ref="FILE" />
			</root>
		</else>
	</if>
</configuration>

dependency 설정에서 janino library를 참조했는데 janino는 if condition을 사용할 수 있게 해준다.

위의 예제는 spring profile이 live인 경우와 그 외의 경우에 대해 로그 레벨을 다르게 설정하고 live에서는 file 로그만 처리하고 그 외의 경우 console, file을 같이 처리하도록 설정하고 있다.

반응형
profile

파란하늘의 지식창고

@Bluesky_

도움이 되었다면 광고를 클릭해주세요