Logback动态修改日志级别的方法

 更新时间:2018年11月23日 10:52:56   作者:totally123  
这篇文章主要介绍了Logback动态修改日志级别的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

问题提出:

一般在生产环境上,日志的级别是INFO以上,但有时候程序出现问题(如SQL报错),少量日志不能尽快定位问题,这时候可以动态修改日志级别到DEBUG,打印更多日志后可以快速定位到问题。

解决方法:

定义动态修改日志级别的接口:这种方法的好处是不用修改配置文件,排错后再次调用接口把日志级别修改回去;坏处是需要在代码中写死指定哪些包要修改日志级别。示例代码如下:

@RestController
public class LogController {
  private static Logger logger = LoggerFactory.getLogger(LogController.class);

  @RequestMapping(value = "logLevel/{logLevel}")
  public String changeLogLevel(@PathVariable("logLevel") String logLevel) {

    try {
      LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
      loggerContext.getLogger("org.mybatis").setLevel(Level.valueOf(logLevel));
      loggerContext.getLogger("org.springframework").setLevel(Level.valueOf(logLevel));
    } catch (Exception e) {
      logger.error("动态修改日志级别出错", e);
      return "fail";
    }

    return "success";
  }
}

修改logback.xml配置文件:在configuration根节点配置属性scan和scanPeriod,scan为true时,配置文件被修改会被重新加载,scanPeriod定义了扫描文件变化的周期,默认6000毫秒,即一分钟。这种做法的好处是不用自己写修改日志级别的逻辑;坏处是要手动更改配置文件,排错完成后需改回原来的配置。示例配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="6000">
  <property name="LOG_HOME" value="/export/logs/cmdb/" />
  <property name="APP_NAME" value="cmdb" />
  <property name="LOG_FILE_EXPIRE_TIME" value="180" />

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} | ${APP_NAME} - %p | %thread | %c | line:%L - %m%n</pattern>
    </encoder>
  </appender>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_HOME}${APP_NAME}.%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>${LOG_FILE_EXPIRE_TIME}</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} | ${APP_NAME} - %p | %thread | %c | line:%L - %m%n</pattern>
    </encoder>
  </appender>

  <root>
    <level value="INFO" />
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java关键字this与super详解用法

    Java关键字this与super详解用法

    这篇文章主要介绍了Java关键字this与super的用法,this与super是类实例化时通往Object类通道的打通者;this和super在程序中由于其经常被隐式的使用而被我们忽略,但是理解其作用和使用规范肯定是必须的。接下来将详述this与super各自的的作用,需要的朋友可以参考一下
    2022-04-04
  • Java 生成图片验证码3种方法(字母、加减乘除、中文)

    Java 生成图片验证码3种方法(字母、加减乘除、中文)

    这篇文章主要介绍了Java 生成图片验证码3种方法(字母、加减乘除、中文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Spring Boot整合mybatis(一)实例代码

    Spring Boot整合mybatis(一)实例代码

    sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置。接下来开始spring-boot与mybatis的整合
    2017-07-07
  • SpringBoot自动装配原理解析

    SpringBoot自动装配原理解析

    Spring Boot自动装配是指在Spring Boot应用启动时,根据类路径下的jar包依赖、Bean定义、各种配置文件等信息,自动配置Spring应用上下文的Bean,本文给大家详细解析了SpringBoot自动装配原理,需要的朋友可以参考下
    2024-11-11
  • java日期格式化SimpleDateFormat的使用详解

    java日期格式化SimpleDateFormat的使用详解

    这篇文章主要介绍了java SimpleDateFormat使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • SpringBoot + Shiro前后端分离权限

    SpringBoot + Shiro前后端分离权限

    这篇文章主要为大家详细介绍了SpringBoot + Shiro前后端分离权限,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 微信公众帐号开发教程之图文消息全攻略

    微信公众帐号开发教程之图文消息全攻略

    本篇主要介绍微信公众帐号开发中图文消息的使用,以及图文消息的几种表现形式。标题取名为"图文消息全攻略",这绝对不是标题党,是想借此机会把大家对图文消息相关的问题、疑虑、障碍全部清除掉。
    2016-12-12
  •  Java数据结构的十大排序

     Java数据结构的十大排序

    这篇文章主要介绍了 Java数据结构的十大排序,排序算法分为比较类排序和非比较类排序,具体的内容,需要的朋友参考下面思维导图及文章介绍,希望对你有所帮助
    2022-01-01
  • mybatis中的test语句失效处理方式

    mybatis中的test语句失效处理方式

    这篇文章主要介绍了mybatis中的test语句失效处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • java打印指定年月份的日历

    java打印指定年月份的日历

    这篇文章主要为大家详细介绍了java打印指定年、指定月份的日历,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07

最新评论