Trang chủHướng dẫnCấu hình log4j.properties trong Java – Ví dụ đầy đủ và dễ hiểu
Java

Cấu hình log4j.properties trong Java – Ví dụ đầy đủ và dễ hiểu

CyStack blog 3 phút để đọc
CyStack blog24/09/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 3 minutes

Trong hướng dẫn về log4j, chúng ta đã thấy cách sử dụng cấu hình log4j dựa trên XML. Tuy nhiên, file log4j.xml thường dài dòng, vì vậy bạn có thể dùng log4j.properties để quản lý log hiệu quả. Cùng tìm hiểu cách chuyển đổi và cấu hình log4j.properties qua ví dụ thực tế.

Cấu hình log4j.properties trong Java

Root Logger

Root logger được sử dụng khi không có logger nào khớp. Trong XML, nó được định nghĩa như sau:

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

Nó có thể được định nghĩa trong file properties như sau:

log4j.rootLogger=DEBUG, file, console

Giá trị đầu tiên trong danh sách comma-separated là mức logging level của root logger. Các giá trị còn lại là các appender.

Log4j Appenders

Chúng ta có thể định nghĩa nhiều appender trong log4j. Dưới đây là hai appender: một dùng để ghi ra console và một dùng để ghi vào file.

<!-- 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>

Trong file log4j.properties, chúng sẽ được định nghĩa như sau:

#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

Vậy định dạng của log4j properties file appender là log4j.appender.{appender_name}.{appender_config} . Lưu ý rằng các cấu hình của appender như MaxFileSize, MaxBackupIndex vẫn giống như trong XML configuration file.

Log4j loggers

Tương tự như appender, chúng ta có thể có nhiều logger. Ví dụ về cấu hình dựa trên 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>

Chúng sẽ được định nghĩa trong file properties dưới dạng log4j.logger.{logger_name}. Giá trị bao gồm mức độ ghi log và danh sách các appender sẽ sử dụng.

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

Log4j logger additivity Việc sử dụng additivity được thể hiện trong cấu hình logger XML ở trên, đây là một attribute của phần tử logger. Dưới đây là cách sử dụng trong cấu hình log4j properties file dưới dạng log4j.additivity.{logger\\_name}.

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

Dựa trên những gì nêu ở trên, dưới đây là file log4j.properties cuối cùng của tôi.

#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 được dùng để cấu hình các thiết lập của log4j. Việc này là tùy chọn nếu tên file là log4j.properties và nằm trong project classpath. Chúng ta phải cấu hình nó trước khi sử dụng logger. Dưới đây là một chương trình đơn giản minh họa cách cấu hình và sử dụng log4j logging.

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");
	}

}

Khi chương trình được thực thi, bạn sẽ thấy kết quả dưới đây trên console log.

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

Cùng lúc đó, bạn sẽ thấy các log được tạo ra trong file main.log như sau.

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

Lưu ý rằng các logger ở mức debug và info sẽ không được in ra vì mức logging tối thiểu đã được đặt là WARN. Đó là tất cả cho ví dụ sử dụng file log4j.properties. Chúc bạn ghi log vui vẻ!

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất