웹 개발

java에서 logback 사용

노루아부지 2019. 12. 16. 11:04

요즘 spring, spring boot가 대세지만, 필요에 따라서는 순수 JAVA 프로젝트를 생성해야 할 경우가 있습니다.

이 경우를 위해 순수 JAVA에서 logback 사용하는 방법을 기술합니다.

 

1. 준비물

우선 필수적으로 총 3개의 모듈이 필요합니다.

logback-core.jar

logback-classic.jar

slf4j-api.jar

 

2. 기본 템플릿

package common;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Migration {
	protected Logger log = LoggerFactory.getLogger(getClass().getName());
    // static으로 선언 시 main 클래스에서 바로 사용할 수 있지만,
    // 다른 클래스에 붙여넣기 할 때 Migration.class를 매번 변경해줘야 하는 불편함이 있음
	private static Logger logger = LoggerFactory.getLogger(Migration.class);

	public void run() {
		log.debug("run START");
	}

	public static void main(String[] args) {
		logger.debug("main START");
		Migration m = new Migration();
		m.run();
	}
}

여기까지만 해도 기본 설정으로 로그가 화면에 표시됩니다.

 

3. 설정 파일 만들기

가장 먼저 설정파일이 있어야 하는 위치는 Classpath입니다. Classpath의 하위 디렉토리(예를 들어 classpath/config/)에 위치하면 설정은 적용되지 않습니다.

 

설정 파일은 총 3가지 종류가 있습니다.

  • logback.groovy
  • logback-test.xml
  • logback.xml

위 세개의 파일은 순서대로 높은 우선순위를 가집니다. 즉, 같은 경로에 logback-text.xml과 logback.xml 파일이 있을 경우 loback-test.xml의 설정을 적용합니다.

 

3-1. 설정 파일의 주요 항목

 

1) level

로그에 설정할 수 있는 레벨은 총 5가지가 있습니다.

  • ERROR > WARN > INFO > DEBUG > TRACE

왼쪽에서 오른쪽 순서대로 높은 레벨을 가지며, 출력 레벨의 설정에 따라 설정 레벨 이상의 로그를 출력합니다.

 

출력 레벨과 로그 레벨의 관계

 

2) Appender

로그를 출력할 위치, 출력 형식 등을 설정할 수 있습니다.

Logback-Core 모듈을 통해 사용할 수 있는 기본적 Appender는 3가지가 있습니다.

 

  • ConsoleAppender
    • 로그를 OutputStream에 write하여, 최종적으로 콘솔에 출력되도록 합니다.
  • FileAppender
    • 로그의 내용을 지정된 File에 기록합니다.
  • RollingFileAppender
    • FileAppender로부터 상속받은 Appender로 날짜, 최대 용량 등을 설정하여 지정한 파일명 패턴에 따라 로그가 다른 파일에 기록되도록 합니다. 이를 이용하여 대량의 로그를 효과적으로 기록할 수 있습니다.

3) Logger

실제 로그 기능을 수행하는 객체로 각 Logger마다 Name을 부여하여 사용합니다.

각 Logger마다 원하는 출력 레벨값을 설정할 수 있으며, 0개 이상의 Appender를 지정할 수 있습니다. 기본적으로 최상위 logger인 Root Logger를 설정해야 하며, 추가로 필요한 logger에 대해 String 또는 클래스명 형식으로 Logger Name을 추가하여 사용할 수 있습니다. 또한 logger의 name은 dot(.)을 사용하여 계층적으로 활용할 수 있습니다.

 

 

3.2. 설정파일 예시

<?xml version="1.0" encoding="UTF-8"?>
<!--
	기존의 log4j는 설정을 바꿀 때마다 재시작을 해야 했지만,
    scanPeriod 옵션을 사용하면, 지정된 재시작을 하지 않아도
    정해진 시간마다 설정을 다시 읽어서 적용합니다.
-->
<configuration scan="true" scanPeriod="30 seconds">
	<!-- 변수 지정-->
    <property name="LOGS_ABSOLUTE_PATH" value="./logs" />
 
 	<!-- 화면(Console) 출력 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}][%-5level][%logger{36}] - %msg%n</pattern>
        </encoder>
    </appender>
 
 	<!-- 파일 출력 RollingFileAppender를 사용하여 정해진 조건에 따라 파일 분할 -->
    <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS_ABSOLUTE_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_ABSOLUTE_PATH}/logback.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>   <!-- 파일의 최대 용량 -->
                <maxHistory>60</maxHistory>        <!-- 일자별 백업파일의 보관기간 -->
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
 
	<!-- level : 출력레벨 -->
    <!-- root에 appender를 추가해야 로그를 기록함 -->
    <root level="info">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="ROLLING" />
    </root>
 
</configuration>

 

자세한 설정은 http://logback.qos.ch/manual/configuration.html 에서 확인할 수 있습니다.

 

 

4. lombok 사용

lombok이라는 아주 멋진 것이 있습니다. 사용자의 편의성을 극단적으로 올려주는데요, @getter, @setter 어노테이션으로 VO의 getter와 setter를 생략 가능하게 해주고, @Slf4j 를 통해 log 선언문도 생략이 가능합니다.

 

ex)

package common;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Migration {
	public void run() {
		log.debug("run START");
	}

	public static void main(String[] args) {
		log.debug("main START");
		Migration m = new Migration();
		m.run();
	}
}

 

4.1. lombok 설치

1) 직접 다운로드 하는 경우

1.1) 아래의 주소에서 다운로드

http://projectlombok.org/download.html

1.2) lombok.jar를 buildpath에 추가


2) Maven을 사용하는 경우

pom.xml에 아래와 같이 추가

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.16.20</version>
</dependency>

 

3) Lombok을 사용하려면 라이브러리만 다운받으면 안되고, 설치를 해야 합니다.

3.1) 다음 방법들 중 선택

  • 콘솔창에서 'java -jar lombok.jar' 실행
  • 직접 다운로드하여 폴더 이동 후 실행
  • Maven 또는 Gradle로 받은 library 실행

3.2) 이클립스를 재부팅한다.

728x90

'웹 개발' 카테고리의 다른 글

java file transfer  (0) 2019.12.27
REST API 호출 예제  (0) 2019.12.23
JSP / JSTL 에서 URL encode 하는 방법  (0) 2019.11.21
jqGrid grid unload  (0) 2019.11.20
DB에 byte로 insert 하기, select 후 string으로 변경하기  (0) 2019.11.19
loading