log4j动态监听配置修改

时间:2023-03-10 03:02:37
log4j动态监听配置修改

一般情况下,log4j的配置文件是log4j.properties。但是每次我们修改了配置文件之后程序并不会自动去加载,而需要我们去重启程序。那么怎么样才能让程序不用重启就监听到变化呢。代码如下:

package taoget;

import java.io.IOException;

import org.apache.log4j.PropertyConfigurator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils; public class App {
private final static Logger LOGGER = LoggerFactory.getLogger(App.class); public static void main(String[] args) throws IOException {
String path=ResourceUtils.getFile("classpath:log4j.properties").getAbsolutePath();
System.out.println(path);
PropertyConfigurator.configureAndWatch(path, 1000 * 2);//2秒 while(true){
LOGGER.debug("--debug--");
LOGGER.info("--info--");
LOGGER.warn("--warn--");
LOGGER.error("--error--");
System.out.println("================================");
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }

1.定义一个循环,每4秒钟就打印debug、info、warn、error的日志

2.获取文件使用了spring的ResourceUtils类。比较方便

3.通过动态修改log4j.properties文件就能看到输出到控制台的日志级别会发生变化。

4.重点是PropertyConfigurator.configureAndWatch。通过这个方法可以修改配置文件的名称和路径。

附log4j.properties配置:

### globel
log4j.rootLogger=DEBUG,console
log4j.additivity.org.apache=true ### console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.err #打印出来就是红色的
log4j.appender.console.Threshold=INFO
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c{2}.%M(%L) - %m%n