柚子快报邀请码778899分享:logback 日志脱敏
工具类
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类型是list,必须指定addReplace方法用以添加多个)
*
* @param replacement replacement
*/
public void addReplace(RegexReplacement replacement) {
replace.add(replacement);
}
public List
return replace;
}
public void setReplace(List
this.replace = replace;
}
}
配置文件logback.xml配置
(\w+)([-+.]\w+)@(\w+([-.]\w+)).(\w+([-.]\w+)*)
]]>
${user.home}/logs/admin/app.%d{yyyy-MM-dd}-%i.log
(\w+)([-+.]\w+)@(\w+([-.]\w+)).(\w+([-.]\w+)*)
]]>
柚子快报邀请码778899分享:logback 日志脱敏
好文链接
发表评论