log4j 笔记之PropertyConfigurator

本文介绍了Apache Log4j的PropertyConfigurator组件,它允许从外部文件进行配置。log4j 0.8.5版本后,会尝试从类路径下加载log4j.properties文件进行初始化。文章还提到了log4j内部日志的启用方法,并指出PropertyConfigurator不支持高级配置特性,如自定义和嵌套的appenders。文中还详细阐述了变量替换的机制,并给出了示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

org.apache.log4j.PropertyConfigurator

Allows the configuration of log4j from an external file.

允许使用外部文件来配置log4j

 

See doConfigure(String, LoggerRepository) for the expected format.

看 doConfigure(String, LoggerRepository)了解期望的格式

 

It is sometimes useful to see how log4j is reading configuration files. You can enable log4j internal logging by defining the log4j.debug variable.

查看log4j是如何读取配置文件有时候是有帮助,你能够通过定义log4j.debug变量启动log4j内部日志

 

As of log4j version 0.8.5, at class initialization time class, the file log4j.properties will be searched from the search path used to load classes.

从log4j 0.8.5版本起, 在类初始化的时候, log4j.properties文件将从用于加载类的路径中被查找

 

If the file can be found, then it will be fed to the configure(java.net.URL) method.

如果 log4j.properties文件被发现,那将调用configure()方法(来初始化log4j)

 

The PropertyConfigurator does not handle the advanced configuration features supported by the DOMConfigurator such as support for Filters,custom ErrorHandlers, nested appenders such as the AsyncAppender, etc.

PropertyConfigurator 不支持高级配置特征

 

All option values admit variable substitution.The syntax of variable substitution is similar to that of Unix shells. The string between an opening "${" and closing "}" is interpreted as a key. The value of the substituted variable can be defined as a system property or in the configuration file itself. The value of the key is first searched in the system properties, and if not found there, it is then searched in the configuration file being parsed. The corresponding value replaces the ${variableName} sequence. For example, if java.home system property is set to /home/xyz, then every occurrence of the sequence ${java.home} will be interpreted as /home/xyz.

所有可选值允许用变量代替,变量代替的语法与Unix shells是类似的。放在以“${”开头并且以“}”结尾的字符串被解释成key。替换的变量(这里可以理解成key)的值(value)被定义成系统属性或者在系统文件中。key的值首先在系统属性中查找,如果没有找到,它会在被解析的配置文件中查找。然后使用对应的值来替换${variableName}。例如,如果使用java.lang包中的System类的静态方法setProperty设置

System.setProperty("java.home", "/home/xyz"),那么每个${java.home}出现的地方都将被解释成/home/xyz

 

eg1:变量代替

java代码:

import org.apache.log4j.Logger;
public class HelloWorld {
       	
//	private static Logger logger = Logger.getLogger(HelloWorld.class.getName()); 
	public static void main(String[] args) {
                System.setProperty("category", "DEBUG, stdout, logFile");//这条语句需要放到Logger初始化之前	
                /*当Logger初始化时,将查找log4j.properties文件,用来初始化Logger*/
		Logger logger = Logger.getLogger(HelloWorld.class.getName()); 

		logger.info("main method start...........");
		System.out.println("Hello, World!");
		logger.info("main method end...............");

		
	}

}

log4j.properties文件配置

#替换变量
rootLogger=DEBUG, stdout
#变量rootLogger首先会在系统属性中查找,如果没有找到,那么就会到被解析的配置文件中查找。
#使用替换变量
log4j.rootLogger=${rootLogger}
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} || %l || %m%n 

 

eg2 :第二种方式设置替换变量

import org.apache.log4j.Logger;

public class HelloWorld {
	
	public static void main(String[] args) {
                //设置系统属性,替换变量
		System.setProperty("catetory", "info, stdout");//这条语句需要放到Logger初始化之前	
		Logger logger = Logger.getLogger("com.hsp.gao"); 

		logger.info("main method start...........");
		System.out.println("Hello, World!");
		logger.info("main method end...............");

		
	}

}

 log4j.properties

#替换变量
rootLogger=DEBUG, stdout, logFile
log4j.rootLogger = ${rootLogger}
#会继承rootLogger中stdout, logFile
log4j.category.com.hsp.gao = ${catetory}
#表示Logger不会在父Logger的appender里输出,默认为true。 
log4j.additivity.com.hsp.gao = false
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} || %l || %m%n 

log4j.appender.logFile=org.apache.log4j.FileAppender
log4j.appender.logFile.Threshold=WARN
log4j.appender.logFile.ImmediateFlush=true
log4j.appender.logFile.Append=false 
log4j.appender.logFile.File=D:/log/AndStudy.txt
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n 

 

2.log4j.Category

 

 

3.log4j.Logger

 

log4j2是Java中一个流行的日志框架,可以帮助我们方便地记录应用程序的日志。 PropertyConfiguratorlog4j2中的一个类,它可以通过读取属性文件来配置log4j2的日志记录器。在配置文件中,我们可以指定日志的输出目标、级别、格式等。 下面是一个示例配置文件: ``` log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}:%L - %m%n ``` 这个配置文件定义了一个名为“stdout”的日志输出目标,它将日志输出到控制台。日志的级别为INFO,表示只记录INFO级别及以上的日志信息。日志的格式由PatternLayout类定义,可以根据需要进行修改。 在Java代码中,我们可以使用以下代码来加载这个配置文件: ```java import org.apache.log4j.PropertyConfigurator; import java.util.Properties; public class TestLog4j2 { public static void main(String[] args) { Properties props = new Properties(); props.load(TestLog4j2.class.getResourceAsStream("/log4j.properties")); PropertyConfigurator.configure(props); Logger logger = LogManager.getLogger(TestLog4j2.class); logger.info("Hello, log4j2!"); } } ``` 在这个代码中,我们首先读取配置文件,并将其传递给PropertyConfigurator来配置log4j2。然后,我们使用LogManager获取一个Logger对象,并使用它来记录一条日志。由于日志级别为INFO,因此这条日志将被输出到控制台。 需要注意的是,log4j2框架的使用可能会因为版本差异而存在一些细微的差别,因此在实际使用中,需要参考相应的文档来进行配置和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值