给log4j2.yml配置rewrite

依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

...


<!--Log4j2 yml-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.9.8</version>
</dependency>

log4j2.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Configuration:
status: warn
monitorInterval: 300

Appenders:
Rewrite:
name: MyRewrite
ignoreExceptions: true
MyRewritePolicy:
debug: false
AppenderRef:
- ref: STDOUT

Console:
name: STDOUT
PatternLayout:
pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%logger{36}.%t:%L] - %msg%n"

Loggers:
Root:
level: info
additivity: true
AppenderRef:
- ref: MyRewrite

MyRewritePolicy.java

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
package com.kangyonggan.demo.util;

import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.rewrite.RewritePolicy;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
import org.apache.logging.log4j.core.util.Booleans;
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.SimpleMessage;

/**
* @author kangyonggan
* @since 2019/4/14 0014
*/
@Plugin(name = "MyRewritePolicy", category = "Core", elementType = "rewritePolicy", printObject = true)
public class MyRewritePolicy implements RewritePolicy {

private boolean debug;

public MyRewritePolicy(boolean debug) {
this.debug = debug;
}

@Override
public LogEvent rewrite(LogEvent event) {
if (debug) {
return event;
}

Message msg = event.getMessage();
if (msg == null) {
return event;
}
String message = msg.getFormattedMessage();

// 处理日志的逻辑
if (null != message) {
message = processData(message);
}
SimpleMessage simpleMessage = new SimpleMessage(message);
return new Log4jLogEvent.Builder(event).setMessage(simpleMessage).build();
}

/**
* 敏感信息处理:手机号、身份证号处理。只需传入要处理的字符串,自动处理满足手机号或身份证格式的数字
*
* @param str
* @return
*/
private String processData(String str) {
// TODO 自行实现
return str;
}

@PluginFactory
public static MyRewritePolicy factory(@PluginAttribute("debug") String debug) {
return new MyRewritePolicy(Booleans.parseBoolean(debug, true));
}

}