通过jmx动态修改logback的日志级别
应用上线后常常会面对这样一种困境,即,如果把日志级别开得太高,那么当系统出现问题时不好查,如果把日志级别定得太低,那么硬盘很可能很快就被撑爆了。
这时候我们常常选择先将日志级别定高点,当出现问题时,再调低。大部分时候人们习惯的做法是修改logback.xml配置文件,然后重启应用。
这听起来当然有问题,我应用跑得好好的,用户用着好好的,为什么要重启呢,谁来应对重启时客户的怒火呢?
logback的开发者想得周到啦,他们为用户提供了一种动态修改日志级别的能力,而不需要你重启应用。下面的内容仅作为一次简单尝试:
修改logback.xml文件
1
2
3
4
5
6
7
8
9...
<jmxConfigurator/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %level [%thread] [%class:%line] - %m%n</pattern>
</encoder>
</appender>
...实际上我们只是新增了一行
<jmxConfigurator/>
启动应用,观察日志
1
2
3
4
52018-04-02 19:23:50 INFO [metrics-logger-reporter-thread-1] [com.codahale.metrics.Slf4jReporter:214] - ....
2018-04-02 19:23:50 INFO [metrics-logger-reporter-thread-1] [com.codahale.metrics.Slf4jReporter:183] - ...
2018-04-02 19:24:00 INFO [qbScheduler-4] [com.gzcb.creditcard.fdp.utils.ReturnFileTasksScheduler:34] - 定时扫描返回文件开始执行...
2018-04-02 19:24:00 INFO [qbScheduler-4] [com.gzcb.creditcard.fdp.utils.ReturnFileTasksScheduler:37] - 当前Web节点不是master,跳过...
...启动jconsole, 连接应用,选择MBean
找到
ch.qos.logback.classic.default
目录下的类ch.qos.logback.classic.jmx.JMXConfigurator
选择操作,选择setLoggerLevel,输入参数,第一个是loggerName,第二个是loggerLevel,点击按钮
观察日志
1
2
3
4
5
6
72018-04-02 19:30:27 DEBUG [DefaultQuartzScheduler_QuartzSchedulerThread] [org.quartz.core.QuartzSchedulerThread:276] - ...
2018-04-02 19:30:50 INFO [metrics-logger-reporter-thread-1] [com.codahale.metrics.Slf4jReporter:214] - ...
2018-04-02 19:30:50 INFO [metrics-logger-reporter-thread-1] [com.codahale.metrics.Slf4jReporter:183] - ...
2018-04-02 19:30:56 DEBUG [DefaultQuartzScheduler_QuartzSchedulerThread] [org.quartz.core.QuartzSchedulerThread:276] - ...
2018-04-02 19:31:00 INFO [qbScheduler-4] [com.gzcb.creditcard.fdp.utils.ReturnFileTasksScheduler:34] - ...
2018-04-02 19:31:00 INFO [qbScheduler-4] [com.gzcb.creditcard.fdp.utils.ReturnFileTasksScheduler:37] - ...
2018-04-02 19:31:22 DEBUG [DefaultQuartzScheduler_QuartzSchedulerThread] [org.quartz.core.QuartzSchedulerThread:276] - ...我们发现本来全是info的日志,突然变成有debug级别输出了。如果再次修改loggerLevel为info,debug日志又消失了。
基础乞丐版应用就是这么简单,请自行尝试。如果想获取更多内容,自行访问https://logback.qos.ch/manual/jmxConfig.html