순수 Java Project에서 Logback 사용할 수 있을까?

2024. 2. 7. 13:09ETC/Other

[목차]

1. 글을 쓴 이유 
2. logback 설정방법 
3. logback 사용방법 
4. (추가) 로그에 색깔 넣기

1.  글을 쓴 이유

System.out.println 보다 log로 코드결과 값을 확인하고 싶어서 java project에 추가하려고 하니 스프링 설정 프로젝트에서만 글이 많이 나오고 자바 프로젝트에 대해서는 나오지 않았다. 그 이유를 혼자서 생각해보니 디버거를 하면 되서 log를 찍을 필요가 없지 않았을까라는 생각을 해본다. 하지만 알고리즘 풀면서 log에 찍고 싶었고 어차피 로그 설정하는 방법을 알아보고자 해서 한번 설정을 해본다.

2. logback 설정방법

먼저 gradle 프로젝트로 이루어진 자바프로젝트가 있다면 그걸로 설정할 것이다. 먼저 gradle logback을 찾아봐야해서 

https://mvnrepository.com/artifact/ch.qos.logback/logback-classic

이 사이트 가면 logback에 대한 버전 정보를 볼수 있을것이다. 지금 현재 기준으로 1.4.14가 제일 높다. 

build.gradle에 해당 내용을 붙여넣기 한다.

dependencies {
    testImplementation platform('org.junit:junit-bom:5.9.1')
    testImplementation 'org.junit.jupiter:junit-jupiter'

	//여기 아래 세줄 추가
    implementation 'ch.qos.logback:logback-classic:1.4.14'
    implementation 'ch.qos.logback:logback-core:1.4.14'
    implementation 'org.slf4j:slf4j-api:2.0.11'
}

그리고 logback.xml 파일을 생성한다.src/resources/ 폴더 안에 만든다. 

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

logback.xml

<configuration scan="true" scanPeriod="10 seconds">

xml을 살펴보면 scan="true"로 되어있는데 이거는 파일이 변경 되었는지 확인하는 방법이다. 오른쪽 scanPeriod= "10 seconds"는 10초마다 파일이 변경되었는지 확인하라는 뜻이다. 

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

그리고 여기를 보면 ConsoleAppender라고 쓰여있는데 이거는 Console에 로그를 찍겠다는 의미이다. 이 외에도 이메일, 파일로 만들 수 있다. 

- 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 : 데이터베이스에 로그를 기록

(출처 : https://velog.io/@cjh8746/Log-Back-적용기#appender )

<root level="info">
    <appender-ref ref="STDOUT" />
</root>

마지막은 root level 설정인데 모든 프로젝트 안에서 log level을 설정하는 것이다.위의 예제에서는 info level로 설정하였다. 

3. logback 사용방법 

package org.example;

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

public class Main {
    static final Logger logger = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        logger.trace("trace");
        logger.debug("debug");
        logger.info("info");
        logger.warn("warn");
        logger.error("로그 찍는건데요?");
    }
}

Console

위와 같이 로그가 잘 찍히는 것을 볼 수 있다. trace와 debug가 안보이는 것은 

<root level="info">
    <appender-ref ref="STDOUT" />
</root>

여기서 info Level로 설정하였기 때문이다. 즉 로그 레벨이 있습니다. 로그를 볼 수있는 레벨입니다. 아래과 같은 그림으로 되어있습니다. 

log level

 

이런 식으로 구성되어있고, 우린 info로 설정하였기 때문에 info 밑에 있는 Warn하고 Error를 표시할 수 있다. 

4.  (추가) 로그에 색깔 넣기

이제는 로그를 보면 한 색깔로만 이루어져 있어서 보기가 불편한데요. 색깔을 넣어서 보기 편하게 바꾸겠습니다. 

색깔은 일단 아래와 같은 종류가 있다. 

%black", "%red", "%green", "%yellow", "%blue", "%magenta", "%cyan", "%white", "%gray", "%boldRed", "%boldGreen", "%boldYellow", "%boldBlue", "%boldMagenta", "%boldCyan", "%boldWhite" and "%highlight"

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%green(%d{HH:mm:ss.SSS}) %magenta([%thread]) %highlight(%-5level) %logger{36} - %yellow(%msg%n)</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

설정파일에 위와 같이 입력을 하고서 실행을 해본다.

위와 같이 색깔이 있게 로그가 출력되는 것을 확인할 수 있다. 

로그를 따로 설정을 잘 안했는데 실무에서는 그냥 되어진 것만 이용하는 것이 대부분이었지만 직접 로그를 설정해서 쓰면 너무 좋겠다 싶습니다.