가자공부하러!

Logback 설정과 활용(Spring Boot 2.2.0) - 파일로 저장 본문

공부/Spring Boot

Logback 설정과 활용(Spring Boot 2.2.0) - 파일로 저장

오피스엑소더스 2019. 10. 7. 12:01

EHCache 설정 : https://dotheright.tistory.com/235

 

참고 : http://logback.qos.ch/documentation.html

참고 : https://taetaetae.github.io/2017/02/19/logback/

참고 : https://derekpark.tistory.com/53

참고 : https://jeong-pro.tistory.com/154

 

1. Logback?


1. Logback

  > 자바 오픈소스 로깅 프레임워크

  > Slf4j의 구현체이자 Spring Boot의 기본 로그 객체

2. 구성

  > Appender

   - ConsoleAppender : 콘솔에 로그를 찍는 방법

   - FileAppender : 파일에 로그를 찍는 방법

   - RollingFileAppender : 여러개의 파일을 순회하면서 로그를 찍는 방법

   - SMTPAppender : 로그를 메일에 찍어 보내는 방법

   - DBAppender : 데이터베이스에 로그를 찍는 방법

   - 기타 : SocketAppender, SSLSocketAppender등

  > Logger

   - 로그 레벨 : ERROR < WARN < INFO < DEBUG < TRACE

    - 로그 레벨 이하의 것은 다 찍는다.

    - ex) INFO 레벨로 지정한 경우 ERROR, WARN, INFO 로그 찍힘

 

1. 기본 설정


1. 설정파일 작성

  > pom.xml

   - logback-classic(logback-core, logback-access등 포함)

   - lombok을 사용한다면(@Slf4j) 아래 디펜던시는 없어도 된다.

<!-- 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>

  > src/main/resources/logback-spring.xml

   - 설정파일 찾는 순서 : logback.groovy -> logback-test.xml -> logback.xml

   - Spring Boot에서는 logback.xml 대신 logback-spring.xml로 설정해주어야 함

 

2. 수행결과


 

3. 소스코드 - github


1. CommonController.java

package com.logback.common.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class CommonController {

	Logger logger = LoggerFactory.getLogger(CommonController.class);

	
	@RequestMapping(value = {"/", "/welcome"})
	public String welcome() {
		log.info("welcome()");
		log.error("welcome error log");
		logger.info("로그로그");
		logger.error("로그에러로그에러");
		return "welcome";
	}
}

2. logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true">
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    
    <property name="LOG_DIR" value="/eCall/logs" />
    <property name="SERVER_NAME" value="collection"/>
    <property name="LOG_PATH_NAME" value="${LOG_DIR}/${SERVER_NAME}" />
    <property name="FILE_NAME" value="collectionServer" /> 
 
    <!-- FILE Appender -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- <file>${LOG_PATH_NAME}/${FILE_NAME}.log</file> -->
        <file>Log/${LOG_PATH_NAME}/${FILE_NAME}.log</file>
        <!-- 일자별 로그파일 저장 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH_NAME}/${FILE_NAME}_%d{yyyyMMdd}.log</fileNamePattern>            
            <!-- 일자별 로그파일 저장 기간 설정 -->
            <maxHistory>30</maxHistory> 
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%F]%M\(%L\) : %m%n</pattern>
        </encoder>
    </appender>
     
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!-- [2018-08-17] [15:24:21.355] [log level] [logName]      [class.java line]       [message] -->
            <!--     날짜           시간       로그레벨    로거이름   로그인클래스.java 몇번째줄    로그메세지 -->
            <pattern>[%d{yyyy-MM-dd}] [%d{HH:mm:ss.SSS}] [%p] [%c{1}] [%F:%L [%m]%n</pattern>
        </layout>
    </appender>
         
    <!-- ERROR레벨 이상만 출력 -->
    <!-- <root level="INFO"> -->
    <root level="ERROR">
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </root>
    
</configuration>

3. application.yml

#Project RHYMES
server:
  port: 19082
#JSP config
  servlet:
    jsp:
      init-parameters:
        development: true
#custume error page
  error:
    whitelabel:
      enabled: true

spring:
  #db config
  datasource: 
    hikari:
      jdbc-url: jdbc:mysql://localhost:3306/rhymes?characterEncoding=UTF-8&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull
      pool-name: hikari-cp
      maximum-pool-size: 30
      minimum-idle: 2
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: mhj
      password: mhj
  jpa:
    database: mysql
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    open-in-view: false
    properties:
      hibernate:
        show-sql: true
        format_sql: true
    generate-ddl: true
  #jsp
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
      enabled: true
      file-size-threshold: 10MB
      
logging:
  config: classpath:logback-spring.xml
  file:
   path: logs
  level: 
    org.springframework: INFO
    org:     
     #JPA Hibernate 로깅
     hibernate:
      SQL: DEBUG
      type:
       descriptor:
         sql:
           BasicBinder: TRACE

 

Comments