log4j在运行时修改日志级别

1 篇文章 0 订阅

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);
		}
	}
}

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值