본문 바로가기
IT/SpringBoot

스프링부트에 log4j2 적용하기(gradle, log4j2.yml 활용)

by twofootdog 2020. 3. 29.

이번 글에서는 스프링부트 서비스에서 gradle과 log4j2.yml 파일을 활용하여 log4j2 설정을 진행할 것이다.

log4j2는 늘 사용하지만 한번 글로 정리가 필요할 것 같아서 정리해보았다.

 

설정을 진행하는 스프링부트 버전은 2.2.6 버전이며 gradle은 5.6 버전이다.

log4j2 설정을 하기 위해서는 다음과 같은 파일을 수정해야 한다.

  1. build.gradle : gradle 설정파일
  2. resources/application.yml : 스프링부트 서비스 설정파일
  3. resources/log4j2.yml : log4j2 설정파일

 

 


1. build.gradle

build.gradle파일 수정해보자. 두가지를 수정해줘야 하는데, 첫번째는 log4j2에 필요한 의존성을 추가해줘야하고(log4j2, jackson-dataformat-yml), 두번째는 logback을 제외해줘야 한다(logback설정을 제외해주지 않으면 log4j2를 적용한다 할지라도 스프링부트의 기본설정인 logback 설정으로 로깅을 하게 된다). 

캡쳐화면에서 보면 jackson-dataformat-yaml을 의존성에 추가한 것을 볼 수 있는데, 그 이유는 jackson-dataformat-yaml이 미존재하면 log4j2의 설정파일을 yml로 작성할 수 없기 때문이다(xml로만 인식 가능). 

또한 log4j-slf4j-impl, slf4j-api, log4j-api, log4j-core 등을 제외한 이유는 해당 라이브러리들이 모두 org.springframework.boot:spring-boot-starter-log4j2에 포함되어 있기 때문이다.

configurations {
    all {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
}

dependencies {
	...
    compile 'org.springframework.boot:spring-boot-starter-log4j2'   // log4j2
    compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.10.3'   // log4j2

}

 

 

 


2. resources/application.yml

다음으로 스프링부트 설정파일인 application.yml을 수정해보자. 

application.yml에는 log4j2.yml파일의 위치만 작성해주면 된다.

logging:
  config: classpath:log4j2.yml

 

 

 


3. resources/log4j2.yml

다음으로 log4j2 설정파일인 log4j2.yml을 생성한다.

보통 log4j2.xml파일로 생성하지만 필자는 log4j2.yml로 생성했다.

로그는 console 화면, logfile.log, rollingfile.log 3개로 출력했다.

로그 레벨은 우선 Configuration의 status인 warn을 기본으로 하지만, Loggers에 info와 debug로 정의되어 있기 때문에 Loggers에 정의된 레벨을 따른다. 로그 레벨은 trace > debug > info > warn > error > fatal 순이다. 

Configutation:
  name: Default
  status: warn

  Properties:
    Property:
      name: log-path
      value: "logs"

  Appenders:
    Console:
      name: Console_Appender
      target: SYSTEM_OUT
      PatternLayout:
        pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
    File:
      name: File_Appender
      fileName: ${log-path}/logfile.log
      PatternLayout:
        pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
    RollingFile:
      - name: RollingFile_Appender
        fileName: ${log-path}/rollingfile.log
        filePattern: "logs/archive/rollingfile.log.%d{yyyy-MM-dd-hh-mm}.gz"
        PatternLayout:
          pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
        Policies:
          SizeBasedTriggeringPolicy:
            size: 1 KB
        DefaultRollOverStrategy:
          max: 30
  Loggers:
    Root:
      level: info
      AppenderRef:
        - ref: Console_Appender
        - ref: File_Appender
        - ref: RollingFile_Appender
    Logger:
      - name: edu.project
        additivity: false
        level: debug
        AppenderRef:
          - ref: Console_Appender
          - ref: File_Appender
          - ref: RollingFile_Appender

 

 

 

log4j2 설정파일 생성을 완료하였으면 아래와 같이 로깅을 할 수 있다.

package edu.project.service;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class MemberService {

    private static final Logger logger = LogManager.getLogger(MemberService.class);

    public void function() {
        logger.info("INFO SUCCESS");
        logger.debug("DEBUG SUCCESS");
        logger.error("ERROR SUCCESS");
    }

 

 

 

 


참고

https://logging.apache.org/log4j/2.x/manual/configuration.html

 

Log4j – Configuring Log4j 2

Configuration Inserting log requests into the application code requires a fair amount of planning and effort. Observation shows that approximately 4 percent of code is dedicated to logging. Consequently, even moderately sized applications will have thousan

logging.apache.org

http://smasue.github.io/log4j-yml

 

Spring boot: use YAML to configure log4j2

25 Sep 2015 Spring boot: use YAML to configure log4j2 Let’s see how to use YAML to configure log4j2 on a Spring boot application. Maven Basically, you need to exclude from your pom.xml the dependency tospring-boot-starter-logging and add instead spring-boo

smasue.github.io

 

댓글