柚子快报邀请码778899分享:logback 日志脱敏

http://yzkb.51969.com/

工具类

CustomLogbackPatternLayoutEncoder.java

import ch.qos.logback.classic.encoder.PatternLayoutEncoder;

public class CustomLogbackPatternLayoutEncoder extends PatternLayoutEncoder {

/**

* 正则替换规则

*/

private LogbackReplaces replaces;

/**

* 使用自定义 MyLogbackPatternLayout 格式化输出

*/

@Override

public void start() {

CustomPatternLayout patternLayout = new CustomPatternLayout(replaces);

patternLayout.setContext(context);

patternLayout.setPattern(this.getPattern());

patternLayout.setOutputPatternAsHeader(outputPatternAsHeader);

patternLayout.start();

this.layout = patternLayout;

started = true;

}

public LogbackReplaces getReplaces() {

return replaces;

}

public void setReplaces(LogbackReplaces replaces) {

this.replaces = replaces;

}

}

CustomPatternLayout.java

import ch.qos.logback.classic.PatternLayout;

import ch.qos.logback.classic.spi.ILoggingEvent;

import lombok.extern.slf4j.Slf4j;

@Slf4j

public class CustomPatternLayout extends PatternLayout {

/**

* 正则替换规则

*/

private final LogbackReplaces replaces;

public CustomPatternLayout(LogbackReplaces replaces) {

super();

this.replaces = replaces;

}

/**

* 格式化日志信息

*

* @param event ILoggingEvent

* @return 日志信息

*/

@Override

public String doLayout(ILoggingEvent event) {

// 占位符填充

String msg = super.doLayout(event);

// 脱敏处理

return this.buildSensitiveMsg(msg);

}

/**

* 根据配置对日志进行脱敏

*

* @param msg 消息

* @return 脱敏后的日志信息

*/

public String buildSensitiveMsg(String msg) {

if (this.replaces == null || this.replaces.getReplace() == null || this.replaces.getReplace().isEmpty()) {

log.error("日志脱敏开启,但未配置脱敏规则,请检查配置后重试");

return msg;

}

String sensitiveMsg = msg;

for (RegexReplacement replace : this.replaces.getReplace()) {

// 遍历脱敏正则 & 替换敏感数据

sensitiveMsg = replace.format(sensitiveMsg);

}

return sensitiveMsg;

}

}

RegexReplacement.java

import java.util.regex.Pattern;

public class RegexReplacement {

/**

* 脱敏匹配正则

*/

private Pattern regex;

/**

* 替换正则

*/

private String replacement;

/**

* Perform the replacement.

*

* @param msg The String to match against.

* @return the replacement String.

*/

public String format(final String msg) {

return regex.matcher(msg).replaceAll(replacement);

}

public Pattern getRegex() {

return regex;

}

public void setRegex(String regex) {

this.regex = Pattern.compile(regex);

}

public String getReplacement() {

return replacement;

}

public void setReplacement(String replacement) {

this.replacement = replacement;

}

}

LogbackReplaces.java

import java.util.ArrayList;

import java.util.List;

public class LogbackReplaces {

/**

* 脱敏正则列表

*/

private List replace = new ArrayList<>();

/**

* 添加规则(因为replace类型是list,必须指定addReplace方法用以添加多个)

*

* @param replacement replacement

*/

public void addReplace(RegexReplacement replacement) {

replace.add(replacement);

}

public List getReplace() {

return replace;

}

public void setReplace(List replace) {

this.replace = replace;

}

}

配置文件logback.xml配置

%d{yyyy-MM-dd HH:mm:ss.SSS} [%t][%p][%c][%M][%L]-> [%m]%n

(\w+)([-+.]\w+)@(\w+([-.]\w+)).(\w+([-.]\w+)*)

]]>

$1****@$3.$4

$1$2$3****$5

$1$2****$4

***

${user.home}/logs/admin/app.%d{yyyy-MM-dd}-%i.log

15

100MB

5GB

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

(\w+)([-+.]\w+)@(\w+([-.]\w+)).(\w+([-.]\w+)*)

]]>

$1****@$3.$4

$1$2$3****$5

$1$2****$4

***

柚子快报邀请码778899分享:logback 日志脱敏

http://yzkb.51969.com/

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。