场景:
- 对于Http请求我们需要输出请求/响应数据,特定请求可以屏蔽日志(如响应Base64图片)
- 对请求响应日志部分字段进行脱敏
- 日志链路追踪APM功能(并且在多线程下也能正常使用)
- 日志策略分环境, 非开发环境不输出控制台日志
适用于Springboot + SpringMVC5x + Logback
<dependency>
<groupId>com.weweibuy.framework</groupId>
<artifactId>common-log</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
引入依赖即可, 如需关闭:
application.properites:
common.log.enable = false
- 说明 该功能基于: Servlet-Filter,MVC-ControllerAdvice, MVC-Interceptor 组合实现,输出日志准确可信,业务开发完全无感
- 特定接口屏蔽日志
方法一: 配置:
application.properites:
common.log.http-path[0].path = /** ## 对指定路径进行配置
common.log.http-path[0].methods = GET,POST ## 对指定请求Method进行配置, 默认全部
common.log.http-path[0].log.disable-req = true ## 对日志进行配置, 禁止输出请求日志
common.log.http-path[0].log.disable-resp-body = true ## 对日志进行配置, 禁止输出响应body
方法二: 代码:
实现LogDisableConfigurer接口,增加配置,并将Bean交给Spring管理
eg: CustomPatternReplaceConfig
- 实现PatternReplaceConfig接口
增加字段处方式或增加脱敏规则配置 并将Bean交给Spring管理 - 通过 PatternReplaceConfig.addPatternReplace 增加或修改匹配与替换规则
提示: 我们内置部分规则: 可以在 DesensitizationLogMessageConverter 中查看;
这些字段包括:
mobile,phone,phoneNo,certId,idCard,idNo,password,pwd,appSecret,fullName,address
如果这些不满足要求可以通过addPatternReplace方法增加或者替换
- 通过配置敏感字段:
application.properites:
common.log.http-path[0].path = /** ## 对指定路径进行配置
common.log.http-path[0].methods = GET,POST ## 对指定请求Method进行配置, 默认全部
common.log.http-path[0].sensitization.sensitization-fields = password,idNo ## 需要脱敏的敏感字段
common.log.http-path[0].sensitization.logger = com.weweibuy.framework.common.log.logger.HttpLogger ## 对指定logger输出的日志脱敏
引入依赖即可, 如需关闭:
application.properites:
common.log.trace.enable = false
- 说明 该功能基于MDC实现,自动为Http请求响应绑定Logback MDC属性为: tid
- 多线程MDC值传递
该功能基于 TTL transmittable-thread-local实现
首先需要加入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>transmittable-thread-local</artifactId>
</dependency>
然后修饰线程池:
修饰线程池
使用Java Agent来修饰JDK线程池实现类
common-log 模块配置了logback-spring.xml, 只有在spring激活dev环境的情况下才输出控制台日志
非dev环境输入文件日志,默认输出路径为: /logs/${app_name} 文件名: application.log
同时也支持通过环境变量 log.path 指定日志文件输出路径