요즘 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) 이클립스를 재부팅한다.
'웹 개발' 카테고리의 다른 글
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 |