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 설정
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을 같이 처리하도록 설정하고 있다.
'Study > Java' 카테고리의 다른 글
Eclipse Package Explorer 에서 Maven Dependencies 정렬하기 (0) | 2019.04.18 |
---|---|
Spring Boot AutoConfigurtaion java.io.FileNotFoundException: class path resource [.class] cannot be opened because it does not exist 에러 (0) | 2019.04.03 |
Spring Boot AutoConfiguration 개발하기 (0) | 2019.03.28 |
Jasypt 암복호화 하기 (1) | 2019.03.01 |
에러 로그를 웹에서 json으로 호출해서 확인하기 (logback appender 만들기) (0) | 2019.01.22 |
Spring Cloud Config Server 사용하기 (0) | 2019.01.03 |
Spring Data Mongodb 사용해보기 (0) | 2018.12.24 |
JDK 11에서 java.xml.bind 관련 에러 발생하는 경우 (0) | 2018.12.13 |
Spring Boot multi module, multi profile 환경에서 @PropertySouce 사용하기 (0) | 2018.12.10 |
STS 4.0.0 이후 java, properties 에디터에서 ctrl + space (content assist) 가 동작하지않는 경우 (0) | 2018.12.06 |