`

log4j在运行时修改日志级别

 
阅读更多

Log4j是什么不多说了,平时我们在项目中使用log4j时,日志输出级别,一般都是预定义在定义文件里的,但问题在于,如果系统发生了错误,我们希望可以看到更多的信息,以确定错误发生的原因。大部分情况下,我们的做法了,停掉系统,修改log4j的输出级别,例如从info改到debug,然后再试着去重现错误。然后悲剧发生了,发现错误就是不出来,总不能系统一直在debug状态下运行吧,除非你真的完全不在乎性能问题。

 

遇到以上情况,其实只要我们在系统里多实现一个小的辅助功能,当系统发生错误时,可以动态修改log4j的日志输出级别就可以了。

public class Log4jTest {

	private static Log log = LogFactory.getLog(Log4jTest.class);

	public static void main(String[] args) {
		log.info("hello1");
		log.debug("world1");
		log.error("Baby1");

		changeLevel("DEBUG");
				
		log.info("hello2");
		log.debug("world2");
		log.error("Baby2");
		
		changeLevel("ERROR");
		
		log.info("hello3");
		log.debug("world3");
		log.error("Baby3");
		
	}
	
	public static void changeLevel(String value) {
		final String sArg = LogManager.getRootLogger().getLevel().toString();
		if (sArg.equals(value)) return;  
		
		final Level level = Level.toLevel(value);
		// 设置根日志级别
		LogManager.getRootLogger().setLevel(level);

		// 获取配置文件中的所有log4j对象
		final Enumeration<Logger> logs = LogManager.getCurrentLoggers();
		while (logs.hasMoreElements()) {
			final Logger logger = logs.nextElement();
			// 给log4j对象设置级别
			logger.setLevel(level);
		}
	}
}

 注:以上代码是参考自某位仁兄的信息,但忘记了来源出处,所以很抱歉,无法说明转载出处。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics