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
原文地址:https://www.cnblogs.com/duanjt/p/9956255.html