일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- linux
- MachineLearning
- vsCode
- ReactNative
- qunit
- TensorFlow
- VirtualBox
- xcode
- centos
- Chrome
- unittest
- MAC
- webpack
- 티스토리챌린지
- 맥
- androidstudio
- 개발
- node
- build
- 센토스
- react
- PYTHON
- 네트워크
- jest
- IOS
- 오블완
- localserver
- Android
- 리눅스
- Today
- Total
로메오의 블로그
[Spring Boot] Logback 설정하기 본문
Spring Boot / Oracle / Mybatis 차례
Spring Boot는 logback이 기본으로 설정되어 있어서 별도로 라이브러리를 추가하지 않아도 됩니다.
spring-boot-starter-web 안에 spring-boot-starter-logging 구현체가 있습니다.
만약 Spring Boot가 아니라면 maven에서 logback 모듈을 추가해줘야 합니다.
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>test</scope>
</dependency>
이전 포스트에서 생성한 프로젝트에서 log를 찍어보겠습니다.
PersonController.java
package controller;
import java.util.Hashtable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import service.PersonService;
import model.Person;
@CrossOrigin
@RestController
@RequestMapping("/persons")
public class PersonController {
@Autowired
PersonService personService;
@RequestMapping("/all")
public Hashtable<String, Person> getAll() {
Logger logger = LoggerFactory.getLogger(PersonController.class);
logger.trace("trace -- Hello world.");
logger.debug("debug -- Hello world.");
logger.info("info -- Hello world.");
logger.warn("warn -- Hello world.");
logger.error("error -- Hello world.");
return personService.getAll();
}
@RequestMapping("{id}")
public Person getPerson(@PathVariable("id") String id) {
return personService.getPerson(id);
}
}
서버를 구동합니다.
Console에서 서버 구동상태를 확인합니다.
브라우저에서 http://localhost:8088/persons/all 에 접속합니다.
Controller에서 찍은 로그가 표시됩니다.
src/main/resources/application.properties
logging.level.root=warn
application.properties에 위 코드를 추가하고 서버를 재구동합니다.
console에 info 로그가 찍히지 않습니다.
페이지를 새로고침하면 info 로그는 찍히지 않고 warn이상의 로그만 찍힙니다.
로그레벨의 순서는 아래와 같습니다.
TRACE > DEBUG > INFO > WARN > ERROR
- TRACE : 추적 레벨은 Debug보다 좀더 상세한 정보를 나타냅니다.
- DEBUG : 프로그램을 디버깅하기 위한 정보를 표시합니다. (운영서버에서는 표시하지 않도록 설정함)
- INFO : 상태변경과 같은 정보성 로그를 표시합니다.
- WARN : 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타냄
- ERROR : 요청을 처리하는 중 오류가 발생한 경우 표시합니다.
Logback 설정 파일
resources폴더에서 New > Other를 선택합니다.
XML > XML File을 선택합니다.
logback-spring.xml을 생성합니다.
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--로그 파일 저장 위치-->
<property name="LOGS_PATH" value="./logs"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<appender name="SAMPLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<appender name="DAILY_ROLLING_FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS_PATH}/logback.log</file>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOGS_PATH}/logback.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>5MB</maxFileSize>
<!-- kb, mb, gb -->
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<logger name="com.gaeyou.firstproject" level="DEBUG">
<appender-ref ref="SAMPLE" />
</logger>
<logger name="com.gaeyou.firstproject" level="INFO">
<appender-ref ref="DAILY_ROLLING_FILE_APPENDER" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Logback-spring.xml은 appender와 logger 크게 두개로 구분됩니다.
appender는 log의 형태를 설정하고
logger는 설정한 appender를 참조하여 package와 level을 설정합니다.
<property>
설정파일에서 사용될 변수값
<appender class="">
appender의 class의 종류는 아래와 같습니다.
ch.qos.logback.core.ConsoleAppender : 콘솔에 로그를 찍음
ch.qos.logback.core.FileAppender : 파일에 로그를 찍음
ch.qos.logback.core.rolling.RollingFileAppender : 여러개의 파일을 순회하면서 로그를 찍음
ch.qos.logback.classic.net.SMTPAppender : 로그를 메일에 찍어 보냄
ch.qos.logback.classic.db.DBAppender : 데이터베이스에 로그를 찍음
<layout> 과 <encoder>
encoder는 layout보다 제어할수 있는 범위가 넓습니다.
encoder는 시간과 내용을 완전히 제어 할수 있지만 layout은 이벤트 등의 제어에 한계가 있습니다.
<pattern>
[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n
[2019-08-23 22:59:47:1306][main] INFO c.g.f.FirstProjectApplication - Started FirstProjectApplication in 1.193 seconds (JVM running for 1.665)
%d => 로그 기록시간
%thread => 현재 Thread 이름
%-5level => 로그 레벨, -5는 출력의 고정폭 (5글자)
%logger{35} => 축약된 logger name, 35는 최대 자릿수
%msg => 로그메시지
%n => 줄바꿈
기타
${PID:-} => 프로세스 아이디
%p => 로깅 레벨
%F => 로깅이 발생한 프로그램 파일명
%M => 로깅일 발생한 메소드의 이름
%l => 로깅이 발생한 호출지의 정보
%L => 로깅이 발생한 호출지의 라인 수
%t => 쓰레드 명
%c => 로깅이 발생한 카테고리
%C => 로깅이 발생한 클래스 명
%m => 로그 메시지
%r => 애플리케이션 시작 이후부터 로깅이 발생한 시점까지의 시간
<file>
기록할 파일명과 경로를 설정합니다.
<rollingPolicy class>
ch.qos.logback.core.rolling.TimeBasedRollingPolicy => 일자별 적용
ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP => 일자별 + 크기별 적용
<fileNamePattern>
파일 쓰기가 종료된 log 파일명의 패턴을 지정합니다.
.gz나 .zip으로 자동으로 압축할 수도 있습니다.
<maxFileSize>
최대 파일 용량 (최대 10MB 내외 권장)
<maxHistory>
최대 파일 생성 갯수 (
<root> 와 <logger>
root는 logger와 같고, 최상위 패키지에 기본적으로 적용한다.
서버를 구동해서 확인 해봅니다.
ConsoleAppener는 SAMPLE과 STDOUT 두가지를 정의 했습니다.
encoder로 적용한 SAMPLE logger는 [YYYY_MM_DD ...] 형태로 로그가 찍히는것을 알 수 있습니다.
STDOUT은 layout으로 찍어서 시간만 표시되는 두가지 형태의 로그가 console에 찍혔습니다.
RollingFileAppender로 찍힌 DAILY_ROLLING_FILE_APPENDER 어펀더는 지정된 경로에 파일이 생성한 것을 알 수 있습니다.
파일을 열어보면 로그를 확인 할 수 있습니다.
gz로 압축된 log도 생성되는것을 확인 할 수 있습니다.
'Backend > Spring' 카테고리의 다른 글
[Spring Boot] Spring Boot - My Batis 연동 - Oracle (12) | 2019.09.19 |
---|---|
[Eclipse] Debug shell 사용하기 (0) | 2019.08.28 |
[Spring Boot] lombok 설정하기 - Mac / Windows (0) | 2019.08.24 |
[Spring Boot] Rest Web Service 구축 - 배포하기 (1) | 2019.07.17 |
[Spring Boot] 스프링 부트 환경설정 (1) | 2019.07.17 |