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