日志组件之debug动态开关
一、应用场景
二、logback简介
三、logback应用debug动态开关
一、应用场景
生产环境,系统日志记录级别一般高于或等于INFO,不会开启DEBUG级别的日志打印。
但如果生产环境系统出现问题,需要在一段时间内启用debug日志,以便调查分析问题,那怎么办呢?
本文将提供一种可行方案。
二、logback简介
Logback是由log4j创始人设计的又一个开源日志组件。
logback当前分成三个模块:logback-core,logback-classic和logback-access。logback-core是其它两个模块的基础模块。
logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14Logging。
logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
三、logback应用debug动态开关
在logback中有一个过滤器TurboFilter,有以下特点:
1.TurboFilter会试图记录上下文环境。因此他们会在每次logging请求产生的时候调用,而不是一个指定的appender使用时才出现。
2.更重要的是,TurboFilter会在日志事件对象创建前调用。因此它具有更高性能的过滤日志事件,即使在事件被创建之前。
相关代码与配置:
DebugLevelTurboFilter 基于TurboFilter。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
来自CODE的代码片
DebugLevelTurboFilter.java
DebugLevelTurboFilter 依赖于一个动态配置组件 DebugLevelConfig(依赖于 diamond ):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
|
来自CODE的代码片
DebugLevelConfig.java
logback.xml中添加一行配置:
<turboFilterclass="org.oschina.log.logback.filter.DebugLevelTurboFilter" />
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
|
来自CODE的代码片
logback.xml