log4j.properties文件示例
在log4j教程中,我们学习了如何使用基于xml的log4j配置。但是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.Olivia.log4j" additivity="false">
<level value="WARN" />
<appender-ref ref="file" />
<appender-ref ref="console" />
</logger>
<logger name="com.Olivia.log4j.logic" additivity="false">
<level value="DEBUG" />
<appender-ref ref="file" />
</logger>
这些值将以属性文件的形式定义,名称为log4j.logger.{logger_name}。这些值包括日志级别和要使用的附加器列表。
#Define loggers
log4j.logger.com.Olivia.log4j=WARN, file, console
log4j.logger.com.Olivia.log4j.logic=DEBUG, file, console
Log4j 日志记录器的可附加性
在上面的日志记录器XML配置中显示了Additivity的用法,它是日志记录器元素的属性。以下是在log4j属性文件配置中使用它的方法,即log4j.additivity.{logger_name}。
#setting additivity
log4j.additivity.com.Olivia.log4j=false
log4j.additivity.com.Olivia.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.Olivia.log4j=WARN, file, console
log4j.logger.com.Olivia.log4j.logic=DEBUG, file, console
#setting additivity
log4j.additivity.com.Olivia.log4j=false
log4j.additivity.com.Olivia.log4j.logic=false
Log4j PropertyConfigurator 的配置文件。
使用PropertyConfigurator来配置log4j的设置。如果文件名是log4j.properties并且在项目类路径中,这是可选的。在使用日志记录器之前,我们必须对它进行配置。下面是一个简单的程序,展示了如何配置和使用log4j日志记录。
package com.Olivia.log4j.main;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import com.Olivia.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,因此debug和info日志记录器不会被打印出来。这就是log4j属性文件示例用法的全部内容了。祝您日志记录愉快!