Log4j는 Apache Software Foundation에서 제공하는 Java 기반의 로깅 라이브러리입니다. 애플리케이션의 실행 상태를 기록하는 데 사용되며, 디버깅, 오류 분석, 성능 모니터링 등에 유용합니다.

Log4j는 다음과 같은 특징을 가집니다:

  1. 유연한 로깅 레벨: 로그의 심각도에 따라 다양한 레벨(TRACE, DEBUG, INFO, WARN, ERROR, FATAL)을 제공합니다.
  2. 다양한 출력 대상: 로그를 파일, 콘솔, 데이터베이스, 원격 서버 등 다양한 곳에 출력할 수 있습니다.
  3. 구성 파일 지원: XML, JSON 또는 .properties 파일로 설정을 관리할 수 있습니다.
  4. 성능 최적화: 비동기 로깅 및 다양한 최적화 기능 제공.

Log4j의 주요 구성 요소

Log4j는 크게 Logger, Appender, Layout 세 가지 요소로 구성됩니다:

  1. Logger: 로그 메시지를 생성하고 로깅 레벨을 제어하는 역할.
  2. Appender: 로그 메시지의 출력 대상을 결정하는 역할 (예: 콘솔, 파일).
  3. Layout: 로그 메시지의 형식을 지정하는 역할 (예: 날짜, 로그 레벨, 메시지).

Log4j의 로깅 레벨

로그 레벨은 로그의 중요도에 따라 설정됩니다. 각 레벨은 아래와 같습니다:

로그 레벨설명

TRACE 가장 상세한 로그로, 디버깅용 세부 정보.
DEBUG 개발 단계에서 유용한 디버깅 정보.
INFO 일반적인 정보 메시지.
WARN 잠재적인 문제를 경고하는 메시지.
ERROR 오류가 발생했지만 애플리케이션이 계속 실행 가능.
FATAL 심각한 오류로 인해 애플리케이션이 종료될 수 있음.

Log4j 설정 파일 예제

(1) log4j.properties 예제

properties
코드 복사
# Root logger 설정
log4j.rootLogger=DEBUG, console, file

# Console 출력 설정
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n

# File 출력 설정
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=app.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n
 

(2) log4j.xml 예제

xml
 
<configuration>
  <appender name="Console" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n"/>
    </layout>
  </appender>

  <appender name="File" class="org.apache.log4j.FileAppender">
    <param name="File" value="app.log"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n"/>
    </layout>
  </appender>

  <root>
    <priority value="DEBUG"/>
    <appender-ref ref="Console"/>
    <appender-ref ref="File"/>
  </root>
</configuration>

Log4j 사용법

1. Logger 생성

Log4j를 사용하려면 Logger 객체를 생성합니다:

java
import org.apache.log4j.Logger;

public class Log4jExample {
    private static final Logger logger = Logger.getLogger(Log4jExample.class);

    public static void main(String[] args) {
        logger.trace("This is a TRACE message");
        logger.debug("This is a DEBUG message");
        logger.info("This is an INFO message");
        logger.warn("This is a WARN message");
        logger.error("This is an ERROR message");
        logger.fatal("This is a FATAL message");
    }
}

2. 주요 메서드

메서드설명

logger.trace(String msg) TRACE 레벨의 로그 메시지를 출력합니다.
logger.debug(String msg) DEBUG 레벨의 로그 메시지를 출력합니다.
logger.info(String msg) INFO 레벨의 로그 메시지를 출력합니다.
logger.warn(String msg) WARN 레벨의 로그 메시지를 출력합니다.
logger.error(String msg) ERROR 레벨의 로그 메시지를 출력합니다.
logger.fatal(String msg) FATAL 레벨의 로그 메시지를 출력합니다.
logger.isDebugEnabled() DEBUG 레벨이 활성화되어 있는지 확인합니다.
logger.isInfoEnabled() INFO 레벨이 활성화되어 있는지 확인합니다.

Log4j와 Log4j 2

  • Log4j 1.x: 위에서 설명한 버전으로 오래된 시스템에서 여전히 사용됩니다.
  • Log4j 2.x: Log4j 1.x의 성능 및 보안 문제를 개선한 최신 버전으로, 비동기 로깅과 동적 로깅 구성이 가능합니다. Log4j 1.x는 더 이상 유지보수되지 않으므로 가능하면 Log4j 2를 사용하는 것이 권장됩니다.

Log4j 관련 보안 이슈

Log4j 2에서 Log4Shell(CVE-2021-44228) 취약점이 발견되었습니다. 공격자가 악의적인 데이터를 이용해 원격 코드 실행(RCE)을 할 수 있는 문제입니다.
해결 방법:

  • Log4j를 2.16.0 이상으로 업그레이드하세요.
  • JNDI 기능을 비활성화하거나 보안 패치를 적용합니다.

'Java' 카테고리의 다른 글

Junit  (0) 2024.12.05
JDBC-Controller  (0) 2024.10.25
JDBC-DAO  (0) 2024.10.25
JDBC-DTO  (0) 2024.10.25
JDBC-View  (0) 2024.10.25

+ Recent posts