1. 개요
이 사용방법(예제)에서는 Apache Log4j2 라이브러리를 사용하여 파일과 콘솔 모두에 메시지를 기록하는 방법을 살펴봅니다 .
이는 콘솔에서 디버그 메시지를 확인하고 이후 분석을 위해 상위 수준 로그를 파일에 유지하려는 비생산 환경에서 매우 유용합니다.
2. 프로젝트 설정
Java 프로젝트를 생성하여 시작하겠습니다. log4j2 의존성을 추가하고 로거를 구성하고 사용하는 방법을 살펴보겠습니다.
2.1. Log4j2 의존성
프로젝트에 log4j2 의존성을 추가해 보겠습니다. Apache Log4J Core 및 Apache Log4J API 의존성이 필요합니다 .
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.18.0</version>
</dependency>
</dependencies>
2.2. 애플리케이션 클래스
이제 log4j2 라이브러리를 사용하여 애플리케이션에 일부 로깅을 추가해 보겠습니다.
public class Log4j2ConsoleAndFile {
private static final Logger logger = LogManager.getLogger(Log4j2ConsoleAndFile.class);
public static void main(String[] args) {
logger.info("Hello World!");
logger.debug("Hello World!");
}
}
3. Log4j2 구성
로거를 자동 구성하려면 클래스 경로에 구성 파일이 있어야 합니다. JSON, XML, YAML 또는 속성 형식일 수 있습니다. 파일 이름은 log4j2여야 합니다. 이 예에서는 log4j2.properties 라는 구성 파일을 사용하겠습니다 .
3.1. 콘솔에 로그인
모든 대상에 기록하려면 먼저 콘솔에 기록하는 appender를 정의해야 합니다 . 이를 위한 구성을 살펴보겠습니다.
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
구성의 각 구성 요소를 이해해 보겠습니다.
- appender.console.type – 여기에서 로그에 사용될 추가자 유형을 지정합니다 . Console 유형은 어펜더가 콘솔에만 쓰도록 지정합니다. 키 이름에 있는 콘솔 이라는 단어는 규칙일 뿐이며 필수 사항은 아닙니다.
- appender.console.name – 나중에 이 appender를 참조하는 데 사용할 수 있는 고유한 이름을 지정할 수 있습니다 .
- appender.console.layout.type – 로그 메시지의 형식을 지정하는 데 사용되는 레이아웃 클래스의 이름을 결정합니다.
- appender.console.layout.pattern – 로그 메시지의 형식을 지정하는 데 사용되는 패턴입니다.
콘솔 로거를 활성화하려면 콘솔 어펜더를 루트 로거에 추가해야 합니다. 위에서 지정한 이름을 사용하여 이 작업을 수행할 수 있습니다.
rootLogger=debug, STDOUT
이 구성을 사용하여 모든 디버그 및 위의 메시지를 콘솔에 기록합니다 . 로컬 환경에서 실행되는 콘솔의 경우 디버그 수준 로깅이 일반적입니다.
3.2. 파일에 로깅
마찬가지로 파일에 기록하도록 로거를 구성할 수 있습니다. 이것은 종종 로그를 유지하는 데 유용합니다. 파일 추가자를 정의해 보겠습니다.
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=logs/log4j.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.filter.threshold.type = ThresholdFilter
appender.file.filter.threshold.level = info
파일 어펜더의 경우 파일 이름도 지정해야 합니다.
이 외에도 임계값 레벨도 설정해 봅시다. 우리는 파일에 기록하고 있기 때문에 많은 영구 저장소를 차지할 수 있기 때문에 모든 메시지를 기록하고 싶지는 않습니다. 정보 수준 이상의 메시지만 기록하려고 합니다. ThresholdFilter 필터를 사용 하고 레벨 정보를 설정하면 됩니다 .
파일 로거를 활성화하려면 루트 로거에 파일 추가자를 추가해야 합니다. 파일 추가자를 포함하도록 rootLogger 구성을 변경해야 합니다 .
rootLogger=debug, STDOUT, LOGFILE
루트 수준에서 수준 디버그를 사용하더라도 파일 로거는 정보 및 위의 메시지만 기록합니다.
4. 테스트
이제 애플리케이션을 실행하고 콘솔에서 출력을 확인합니다.
12:43:47,891 INFO Application:8 - Hello World!
12:43:47,892 DEBUG Application:9 - Hello World!
예상대로 콘솔에서 두 로그 메시지를 모두 볼 수 있습니다. logs/log4j.log 경로에서 로그 파일을 확인하면 정보 수준 로그 메시지 만 볼 수 있습니다 .
12:43:47,891 INFO Application:8 - Hello World!
5. 결론
이 기사에서는 콘솔과 파일 모두에 메시지를 기록하는 방법을 배웠습니다. Java 프로젝트를 생성하고 속성 파일을 사용하여 Log4j2를 구성하고 메시지가 콘솔과 파일 모두에 출력되는지 테스트했습니다.
항상 그렇듯이 전체 소스 코드는 GitHub에서 사용할 수 있습니다 .