个人博客原文地址:http://www.ltang.me/2018/04/02/jmx-logback/
应用上线后常常会面对这样一种困境,即,如果把日志级别开得太高,那么当系统出现问题时不好查,如果把日志级别定得太低,那么硬盘很可能很快就被撑爆了。
这时候我们常常选择先将日志级别定高点,当出现问题时,再调低。大部分时候人们习惯的做法是修改logback.xml配置文件,然后重启应用。
这听起来当然有问题,我应用跑得好好的,用户用着好好的,为什么要重启呢,谁来应对重启时客户的怒火呢?
logback的开发者想得周到啦,他们为用户提供了一种动态修改日志级别的能力,而不需要你重启应用。下面的内容仅作为一次简单尝试:
-
修改logback.xml文件
... <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/>
-
启动应用,观察日志
2018-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,跳过...
…
```
3. 启动jconsole, 连接应用,选择MBean
-
找到
ch.qos.logback.classic.default
目录下的类ch.qos.logback.classic.jmx.JMXConfigurator
-
选择操作,选择setLoggerLevel,输入参数,第一个是loggerName,第二个是loggerLevel,点击按钮
-
观察日志
2018-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