赞
踩
应用在线上部署时,一般日志级别会设置为info级别。一些流量高的应用,甚至会设置为error级别。这样日志打的少了,日志文件就不会变的太大,接口的性能也会更高。但缺点也显而易见,出现问题时,由于日志太少,很难定位出问题在哪儿。
今天就介绍一种,可以动态修改日志级别的方法。
我使用一个叫“my_logger”的logger对象输出日志,demo代码如下
private final Logger logger = LoggerFactory.getLogger("my_logger");
@ResponseBody
@RequestMapping(value = "outputLog")
public String outputLog() {
logger.debug("我是debug级别的日志,入参是...");
logger.info("我是info级别的日志...");
logger.debug("我是debug级别的日志,返回值是...");
return "success";
}
此时请求接口,仅输出一条info级别的日志
【重点】新增一个修改日志级别的接口
排查线上问题时,就调用这个接口,入参可以为:ERROR、WARN、INFO、DEBUG、TRACE
@ResponseBody @PutMapping(value = "level/{logLevel}") public String changeLogLevel(@PathVariable("logLevel") String logLevel) { try { // 1. 获取日志上下文 LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); // 2. 修改指定logger对象的日志级别(这里根据你自己的日志名称修改,我的叫"my_logger") // 如果修改mybatis、spring框架的日志,写"org.mybatis"、"org.springframework" loggerContext.getLogger("my_logger").setLevel(Level.valueOf(logLevel)); System.out.println("日志级别修改成功!" + logLevel); } catch (Exception e) { logger.error("动态修改日志级别出错", e); return "failure"; } return "success"; }
比如我现在改成debug级别
这个时候,再请求第一个接口,就可以看到debug级别的日志了。
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。