├── repo
└── pers
│ └── liuchengyin
│ └── logback-desensitization
│ ├── maven-metadata.xml.md5
│ ├── maven-metadata.xml.sha1
│ ├── 1.0.0
│ ├── logback-desensitization-1.0.0.jar.md5
│ ├── logback-desensitization-1.0.0.pom.md5
│ ├── logback-desensitization-1.0.0.jar.sha1
│ ├── logback-desensitization-1.0.0.pom.sha1
│ ├── logback-desensitization-1.0.0.jar
│ └── logback-desensitization-1.0.0.pom
│ └── maven-metadata.xml
├── src
└── main
│ └── java
│ └── pers
│ └── liuchengyin
│ ├── logbackadvice
│ ├── LcyFileAppender.java
│ ├── LcyConsoleAppender.java
│ ├── LcyRollingFileAppender.java
│ └── DesensitizationAppender.java
│ └── utils
│ ├── YmlUtils.java
│ └── DesensitizationUtil.java
├── pom.xml
└── README.md
/repo/pers/liuchengyin/logback-desensitization/maven-metadata.xml.md5:
--------------------------------------------------------------------------------
1 | c4f1dbf06482f701613e72ac0d756428
--------------------------------------------------------------------------------
/repo/pers/liuchengyin/logback-desensitization/maven-metadata.xml.sha1:
--------------------------------------------------------------------------------
1 | 7c3453696d360b2bd471ef2521f4e8091baf7d94
--------------------------------------------------------------------------------
/repo/pers/liuchengyin/logback-desensitization/1.0.0/logback-desensitization-1.0.0.jar.md5:
--------------------------------------------------------------------------------
1 | ee1287693e97f8ea34570673109bff1a
--------------------------------------------------------------------------------
/repo/pers/liuchengyin/logback-desensitization/1.0.0/logback-desensitization-1.0.0.pom.md5:
--------------------------------------------------------------------------------
1 | 20d17e856c8f8d77c845d258361d8af3
--------------------------------------------------------------------------------
/repo/pers/liuchengyin/logback-desensitization/1.0.0/logback-desensitization-1.0.0.jar.sha1:
--------------------------------------------------------------------------------
1 | c3d251a90de81114179cb01abcff31be8ad1a13e
--------------------------------------------------------------------------------
/repo/pers/liuchengyin/logback-desensitization/1.0.0/logback-desensitization-1.0.0.pom.sha1:
--------------------------------------------------------------------------------
1 | c36f6577323d671ebf4199e340e165caea5bb88b
--------------------------------------------------------------------------------
/repo/pers/liuchengyin/logback-desensitization/1.0.0/logback-desensitization-1.0.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liuchengyin01/LogbackDesensitization/HEAD/repo/pers/liuchengyin/logback-desensitization/1.0.0/logback-desensitization-1.0.0.jar
--------------------------------------------------------------------------------
/repo/pers/liuchengyin/logback-desensitization/maven-metadata.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | pers.liuchengyin
4 | logback-desensitization
5 |
6 | 1.0.0
7 |
8 | 1.0.0
9 |
10 | 20210128024303
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/main/java/pers/liuchengyin/logbackadvice/LcyFileAppender.java:
--------------------------------------------------------------------------------
1 | package pers.liuchengyin.logbackadvice;
2 |
3 | import ch.qos.logback.classic.spi.LoggingEvent;
4 | import ch.qos.logback.core.FileAppender;
5 |
6 | /**
7 | * @ClassName FileAppenderDS
8 | * @Description
9 | * @Author 柳成荫
10 | * @Date 2021/1/9
11 | */
12 | public class LcyFileAppender extends FileAppender {
13 |
14 | @Override
15 | protected void subAppend(Object event) {
16 | DesensitizationAppender appender = new DesensitizationAppender();
17 | appender.operation((LoggingEvent) event);
18 | super.subAppend(event);
19 | }
20 | }
--------------------------------------------------------------------------------
/src/main/java/pers/liuchengyin/logbackadvice/LcyConsoleAppender.java:
--------------------------------------------------------------------------------
1 | package pers.liuchengyin.logbackadvice;
2 |
3 | import ch.qos.logback.classic.spi.LoggingEvent;
4 | import ch.qos.logback.core.ConsoleAppender;
5 |
6 | /**
7 | * @ClassName ConsoleAppenderDS
8 | * @Description
9 | * @Author 柳成荫
10 | * @Date 2021/1/9
11 | */
12 | public class LcyConsoleAppender extends ConsoleAppender {
13 |
14 | @Override
15 | protected void subAppend(Object event) {
16 | DesensitizationAppender appender = new DesensitizationAppender();
17 | appender.operation((LoggingEvent)event);
18 | super.subAppend(event);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/pers/liuchengyin/logbackadvice/LcyRollingFileAppender.java:
--------------------------------------------------------------------------------
1 | package pers.liuchengyin.logbackadvice;
2 |
3 | import ch.qos.logback.classic.spi.LoggingEvent;
4 | import ch.qos.logback.core.rolling.RollingFileAppender;
5 |
6 | /**
7 | * @ClassName RollingFileAppenderDS
8 | * @Description
9 | * @Author 柳成荫
10 | * @Date 2021/1/9
11 | */
12 | public class LcyRollingFileAppender extends RollingFileAppender {
13 |
14 | @Override
15 | protected void subAppend(Object event) {
16 | DesensitizationAppender appender = new DesensitizationAppender();
17 | appender.operation((LoggingEvent)event);
18 | super.subAppend(event);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | org.springframework.boot
7 | spring-boot-starter-parent
8 | 2.4.1
9 |
10 |
11 | pers.liuchengyin
12 | logback-desensitization
13 | 1.0.0
14 | LogbackDesensitization
15 | Logback Desensitization
16 |
17 |
18 | 1.8
19 |
20 |
21 |
22 |
23 | org.springframework.boot
24 | spring-boot-starter
25 |
26 |
27 | com.alibaba
28 | fastjson
29 | 1.2.8
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/src/main/java/pers/liuchengyin/logbackadvice/DesensitizationAppender.java:
--------------------------------------------------------------------------------
1 | package pers.liuchengyin.logbackadvice;
2 |
3 | import ch.qos.logback.classic.spi.LoggingEvent;
4 | import pers.liuchengyin.utils.DesensitizationUtil;
5 |
6 | import java.lang.reflect.Field;
7 |
8 | /**
9 | * @ClassName DesensitizationAppender
10 | * @Description 脱敏类 - 将日志进行脱敏
11 | * @Author 柳成荫
12 | * @Date 2021/1/9
13 | */
14 | public class DesensitizationAppender {
15 | /**
16 | * LoggingEvent的属性 - message
17 | * 格式化前的日志信息,如log.info("your name : {}", "柳成荫")
18 | * message就是"your name : {}"
19 | */
20 | private static final String MESSAGE = "message";
21 | /**
22 | * LoggingEvent的属性 - formattedMessage
23 | * 格式化后的日志信息,如log.info("your name : {}", "柳成荫")
24 | * formattedMessage就是"your name : 柳成荫"
25 | */
26 | private static final String FORMATTED_MESSAGE = "formattedMessage";
27 |
28 | public void operation(LoggingEvent event) {
29 | // event.getArgumentArray() - 获取日志中的参数数组
30 | // 如:log.info("your name : {}, your id : {}", "柳成荫", 11)
31 | // event.getArgumentArray() => ["柳成荫",11]
32 | if (event.getArgumentArray() != null) {
33 | // 获取格式化后的Message
34 | String eventFormattedMessage = event.getFormattedMessage();
35 | DesensitizationUtil util = new DesensitizationUtil();
36 | // 获取替换后的日志信息
37 | String changeMessage = util.customChange(eventFormattedMessage);
38 | if (!(null == changeMessage || "".equals(changeMessage))) {
39 | try {
40 | // 利用反射的方式,将替换后的日志设置到原event对象中去
41 | Class extends LoggingEvent> eventClass = event.getClass();
42 | // 保险起见,将message和formattedMessage都替换了
43 | Field message = eventClass.getDeclaredField(MESSAGE);
44 | message.setAccessible(true);
45 | message.set(event, changeMessage);
46 | Field formattedMessage = eventClass.getDeclaredField(FORMATTED_MESSAGE);
47 | formattedMessage.setAccessible(true);
48 | formattedMessage.set(event, changeMessage);
49 | } catch (IllegalAccessException | NoSuchFieldException e) {
50 | e.printStackTrace();
51 | }
52 | }
53 |
54 | }
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Logback和slf4j的日志脱敏组件
2 | #### 前言
3 | 对于日志脱敏的方式有很多,常见的有①使用conversionRule标签,继承MessageConverter②书写一个脱敏工具类,在打印日志的时候对特定特字段进行脱敏返回。
4 | 两种方式各有优缺点:第一种方式需要修改代码,不符合开闭原则。第二种方式,需要在日志方法的参数进行脱敏,对原生日志有入侵行为。
5 |
6 |
7 | #### 本组件说明
8 | 本组件基于非入侵及脱敏字段扩展考虑,采用yml配置文件来扩展脱敏字段及不同的脱敏规则。其核心思想就是:读取配置文件里的脱敏字段和其脱敏规则。在日志替换的时候将字段进行脱敏。
9 | 本组件基于logback+slf4j,暂不支持log4j,如需解决log4j的日志,可以参照本组件的思想去完成。
10 | 本组件支持的脱敏数据类型:八大基本类型及其包装类型、String类型、Map、List