웹사이트 검색

log4j.properties 파일 예제


log4j 튜토리얼에서 log4j xml 기반 구성을 사용하는 방법을 보았습니다. 그러나 log4j.xml은 장황하므로 log4j 프레임워크는 속성 파일에서 구성을 읽을 수 있는 옵션도 제공합니다. 속성 파일에는 유효성을 검사할 정의된 스키마가 없으므로 더 주의해야 합니다. 오늘은 XML 구성을 속성 기반 구성으로 변환하는 방법을 살펴보겠습니다.

루트 로거

루트 로거는 로거와 일치하는 항목이 없을 때 사용합니다. XML에서 아래와 같이 정의되어 있습니다.

<root>
	<priority value="DEBUG" />
	<appender-ref ref="file" />
	<appender-ref ref="console" />
</root>

아래와 같이 속성 파일에서 정의할 수 있습니다.

log4j.rootLogger=DEBUG, file, console

쉼표로 구분된 목록의 첫 번째 값은 루트 로깅 수준 값입니다. 다른 모든 값은 어펜더입니다.

Log4j 어펜더

우리는 log4j에 여러 개의 appender를 가질 수 있습니다. 다음은 두 개의 appender입니다. 하나는 콘솔 로깅용이고 다른 하나는 파일용입니다.

<!-- console appender -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
	<param name="Target" value="System.out" />
	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%-5p %c{1} - %m%n" />
	</layout>
</appender>

<!-- rolling file appender -->
<appender name="file" class="org.apache.log4j.RollingFileAppender">
	<param name="File" value="logs/main.log" />
	<param name="Append" value="true" />
	<param name="ImmediateFlush" value="true" />
	<param name="MaxFileSize" value="10MB" />
	<param name="MaxBackupIndex" value="5" />

	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%d %d{Z} [%t] %-5p (%F:%L) - %m%n" />
	</layout>
</appender>

log4j.properties 파일에서 아래와 같이 정의됩니다.

#Define console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
logrj.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %c{1} - %m%n

#Define rolling file appender
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/main.log
log4j.appender.file.Append=true
log4j.appender.file.ImmediateFlush=true
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %d{Z} [%t] %-5p (%F:%L) - %m%n

따라서 log4j 속성 파일 추가자의 형식은 log4j.appender.{appender_name}.{appender_config}입니다. MaxFileSize, MaxBackupIndex와 같은 어펜더 구성은 XML 구성 파일과 동일합니다.

Log4j 로거

어펜더와 마찬가지로 여러 로거를 가질 수 있습니다. xml 기반 구성의 예;

<logger name="com.journaldev.log4j" additivity="false">
	<level value="WARN" />
	<appender-ref ref="file" />
	<appender-ref ref="console" />
</logger>

<logger name="com.journaldev.log4j.logic" additivity="false">
	<level value="DEBUG" />
	<appender-ref ref="file" />
</logger>

속성 파일에서 log4j.logger.{logger_name}로 정의됩니다. 값에는 로깅 수준과 사용할 추가자 목록이 포함됩니다.

#Define loggers
log4j.logger.com.journaldev.log4j=WARN, file, console
log4j.logger.com.journaldev.log4j.logic=DEBUG, file, console

Log4j 로거 부가성

Additivity 사용법은 위의 logger xml 구성에 표시되며 logger 요소의 속성입니다. 다음은 log4j 속성 파일 구성에서 log4j.additivity.{logger_name}로 사용하는 방법입니다.

#setting additivity
log4j.additivity.com.journaldev.log4j=false
log4j.additivity.com.journaldev.log4j.logic=false

위의 내용을 바탕으로 아래는 최종 log4j.properties 파일입니다.

#Define root logger options
log4j.rootLogger=DEBUG, file, console

#Define console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
logrj.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %c{1} - %m%n

#Define rolling file appender
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/main.log
log4j.appender.file.Append=true
log4j.appender.file.ImmediateFlush=true
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %d{Z} [%t] %-5p (%F:%L) - %m%n

#Define loggers
log4j.logger.com.journaldev.log4j=WARN, file, console
log4j.logger.com.journaldev.log4j.logic=DEBUG, file, console

#setting additivity
log4j.additivity.com.journaldev.log4j=false
log4j.additivity.com.journaldev.log4j.logic=false

Log4j PropertyConfigurator

PropertyConfigurator는 log4j 설정을 구성하는 데 사용됩니다. 파일 이름이 log4j.properties이고 프로젝트 클래스 경로에 있는 경우 선택 사항입니다. 로거를 사용하기 전에 구성해야 합니다. 다음은 log4j 로깅을 구성하고 사용하는 방법을 보여주는 간단한 프로그램입니다.

package com.journaldev.log4j.main;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import com.journaldev.log4j.logic.MathUtils;

public class Log4jExample {

	static{
		init();
	}
	
	private final static Logger logger = Logger.getLogger(Log4jExample.class);
	
	public static void main(String[] args) {

		logger.debug("My Debug Log");
		logger.info("My Info Log");
		logger.warn("My Warn Log");
		logger.error("My error log");
		logger.fatal("My fatal log");
				
	}

	/**
	 * method to init log4j configurations
	 */
	private static void init() {
		PropertyConfigurator.configure("log4j.properties");
	}

}

실행되면 콘솔 로그에 아래에 표시됩니다.

WARN  Log4jExample - My Warn Log
ERROR Log4jExample - My error log
FATAL Log4jExample - My fatal log

동시에 아래와 같이 main.log 파일에 로그가 생성되는 것을 볼 수 있습니다.

2016-05-14 00:34:11,994 +0530 [main] WARN  (Log4jExample.java:20) - My Warn Log
2016-05-14 00:34:11,995 +0530 [main] ERROR (Log4jExample.java:21) - My error log
2016-05-14 00:34:11,995 +0530 [main] FATAL (Log4jExample.java:22) - My fatal log

최소 로깅 수준이 WARN으로 설정되어 있기 때문에 디버그 및 정보 로거가 인쇄되지 않는다는 점에 유의하십시오. 이것이 log4j 속성 파일 예제 사용법의 전부입니다. 행복한 로깅!