JAVA

[JAVA] Lombok 로깅 처리 (@Slf4j, @Log 등)

인생아 2024. 10. 31. 13:12
반응형

애플리케이션의 로깅은 디버깅과 성능 모니터링에서 중요한 역할을 합니다. Lombok은 로깅을 더욱 편리하게 구현할 수 있도록 돕는 다양한 로깅 애너테이션을 제공하여, 불필요한 코드 작성을 줄이고 로깅 처리를 간단히 만듭니다. 이번 글에서는 @Slf4j@Log 같은 로깅 애너테이션의 사용법과, 다양한 로깅 프레임워크와의 호환성, 그리고 로깅을 활용해 디버깅과 성능을 모니터링하는 방법을 알아보겠습니다.

@Slf4j, @Log 등 로깅 애너테이션 사용법

Lombok은 @Slf4j, @Log, @Log4j 등의 애너테이션을 통해 로깅 프레임워크와 자동으로 연결할 수 있도록 도와줍니다. 각 애너테이션은 특정 로깅 프레임워크와 호환되며, 애너테이션 하나로 로그 객체를 선언할 수 있어 사용이 간편합니다.

1. @Slf4j: Slf4j(Simple Logging Facade for Java) 프레임워크를 위한 로거를 생성합니다. 이 프레임워크는 로깅 인터페이스를 제공하며, 실제 로깅을 위해 Logback이나 Log4j2와 연결해 사용할 수 있습니다.

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class LoggingExample {
    public void logMessages() {
        log.info("This is an info message");
        log.warn("This is a warning message");
        log.error("This is an error message");
    }
}

위 코드에서 log.info, log.warn, log.error 등을 통해 로그 레벨에 따라 다른 메시지를 출력할 수 있습니다. @Slf4j 애너테이션 덕분에 별도로 Logger 객체를 선언하지 않아도 됩니다.

2. @Log: Java 내장 로깅 라이브러리인 java.util.logging과 연결합니다. 가벼운 로깅을 원할 때 유용합니다.

import lombok.extern.java.Log;

@Log
public class JavaUtilLoggingExample {
    public void logMessages() {
        log.info("Logging with java.util.logging");
        log.severe("Severe level logging example");
    }
}

위 예제는 @Log 애너테이션으로 java.util.logging을 사용한 로깅을 설정합니다. log.infolog.severe 메서드를 통해 로그를 남길 수 있습니다. 이 로깅 라이브러리는 설정이 간단하고 저장공간을 덜 사용하는 것이 장점입니다.

3. @Log4j / @Log4j2: Log4j 또는 Log4j2와 호환됩니다. 이 애너테이션은 Log4j 라이브러리를 통해 추가 설정로그 포맷 관리에 강점을 가지며, 특히 대용량 로그 처리에 유리합니다.

import lombok.extern.log4j.Log4j2;

@Log4j2
public class Log4jExample {
    public void logMessages() {
        log.debug("Debug level log");
        log.info("Information log example");
        log.error("Error log example");
    }
}

@Log4j2 애너테이션을 통해 Log4j2로 로깅을 설정할 수 있으며, 다양한 로그 포맷 및 파일 출력 설정이 가능합니다.

다양한 로깅 프레임워크와의 호환성

Lombok의 로깅 애너테이션은 Java Util Logging, Slf4j, Log4j, Log4j2 등 여러 로깅 프레임워크와 호환됩니다. 각 프레임워크는 장단점이 있으며, 애플리케이션 요구사항에 따라 선택하여 사용할 수 있습니다.

  • Slf4j: 표준 인터페이스로 다양한 로깅 프레임워크와 연결이 가능하며, 특히 Logback과 함께 많이 사용됩니다. 유연한 로깅 처리가 가능해 실무에서 자주 선택됩니다.
  • Log4j / Log4j2: 대용량 로그 처리에 특화된 설정을 제공하여, 고성능 로깅이 필요한 환경에 적합합니다.
  • Java Util Logging: 가볍고 기본적인 로깅이 필요한 경우 유용하며, 별도의 외부 라이브러리 없이 Java 내장 라이브러리로 로깅을 구현할 수 있습니다.

로깅을 활용한 디버깅 및 성능 모니터링

로깅은 디버깅애플리케이션 성능 모니터링에서 매우 중요한 역할을 합니다. 로깅 레벨을 적절히 설정해 디버깅에 필요한 정보만 기록하고, 과도한 로그 발생을 피할 수 있습니다.

1. 디버깅에 적합한 로깅 레벨 설정: 디버깅 단계에서는 DEBUG 또는 TRACE 레벨을 활용하여 세부 정보를 기록할 수 있습니다. 배포 환경에서는 INFO 또는 ERROR 레벨로 설정하여 필요한 정보만 남기는 것이 일반적입니다.

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class DebuggingExample {
    public void executeTask() {
        log.debug("Starting task execution");
        try {
            // Some task execution
            log.info("Task executed successfully");
        } catch (Exception e) {
            log.error("Task execution failed", e);
        }
    }
}

위 코드에서는 DEBUGINFO, ERROR 레벨의 로깅을 설정하여 실행 단계에 따라 필요한 로그만 기록합니다. 특히, Exception 발생 시 log.error로 예외 정보를 기록하여 에러 원인을 쉽게 파악할 수 있습니다.

2. 성능 모니터링: 로깅을 활용해 애플리케이션의 성능을 모니터링할 수 있습니다. 특정 메서드의 시작과 끝에 로깅을 추가하여 메서드 실행 시간을 측정하거나, 시스템 자원 사용 상태를 기록할 수 있습니다.

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class PerformanceMonitor {
    public void processData() {
        long startTime = System.currentTimeMillis();
        log.info("Process started at {}", startTime);
        
        // Perform some operations
        
        long endTime = System.currentTimeMillis();
        log.info("Process finished at {}, duration: {} ms", endTime, (endTime - startTime));
    }
}

PerformanceMonitor 클래스는 작업의 시작과 끝을 기록하여 실행 시간을 측정합니다. 이와 같은 성능 로깅은 특히 데이터베이스 연동, 네트워크 통신, 파일 처리성능 병목 현상이 발생하기 쉬운 영역에서 유용하게 사용됩니다.

참고사이트

반응형