logback 日志脱敏

2024-05-10 08:44
文章标签 日志 logback 脱敏

本文主要是介绍logback 日志脱敏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

工具类

CustomLogbackPatternLayoutEncoder.java


import ch.qos.logback.classic.encoder.PatternLayoutEncoder;public class CustomLogbackPatternLayoutEncoder extends PatternLayoutEncoder {/*** 正则替换规则*/private LogbackReplaces replaces;/*** 使用自定义 MyLogbackPatternLayout 格式化输出*/@Overridepublic 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 日志信息*/@Overridepublic 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<RegexReplacement> replace = new ArrayList<>();/*** 添加规则(因为replace类型是list,必须指定addReplace方法用以添加多个)** @param replacement replacement*/public void addReplace(RegexReplacement replacement) {replace.add(replacement);}public List<RegexReplacement> getReplace() {return replace;}public void setReplace(List<RegexReplacement> replace) {this.replace = replace;}
}

配置文件logback.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="6000"><!--输出到控制台--><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder class="CustomLogbackPatternLayoutEncoder类路径"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t][%p][%c][%M][%L]-> [%m]%n</Pattern><!-- 脱敏规则列表 --><replaces><!-- 脱敏规则 --><replace><!-- 邮箱,保留@前的前1后1 --><regex><![CDATA[(\w+)([-+.]\w+)@(\w+([-.]\w+)).(\w+([-.]\w+)*)]]></regex><replacement>$1****@$3.$4</replacement></replace><replace><!-- 11位的手机号:保留前3后4 --><regex><![CDATA[(1)([3-9])(\d)(\d{4})(\d{4})]]></regex><replacement>$1$2$3****$5</replacement></replace><replace><!-- 固定电话: XXXX-XXXXXXXX或XXX-XXXXXXXX,保留区号+前2后2 --><regex><![CDATA[([\d]{3,4}-)(\d{2})(\d{4})(\d{2})]]></regex><replacement>$1$2****$4</replacement></replace><replace><!-- security自带测试密码--><regex><![CDATA[.*(Using generated security).*]]></regex><replacement></replacement></replace><replace><!--ip --><regex><![CDATA[(?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])(?![0-9])]]></regex><replacement>***</replacement></replace></replaces></encoder></appender><!-- 按照每天生成日志文件 --><appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><FileNamePattern>${user.home}/logs/admin/app.%d{yyyy-MM-dd}-%i.log</FileNamePattern><MaxHistory>15</MaxHistory><!--日志文件最大的大小--><MaxFileSize>100MB</MaxFileSize><totalSizeCap>5GB</totalSizeCap></rollingPolicy><encoder class="CustomLogbackPatternLayoutEncoder类路径"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><replaces><replace><!-- 邮箱,保留@前的前1后1 --><regex><![CDATA[(\w+)([-+.]\w+)@(\w+([-.]\w+)).(\w+([-.]\w+)*)]]></regex><replacement>$1****@$3.$4</replacement></replace><replace><!-- 11位的手机号:保留前3后4 --><regex><![CDATA[(1)([3-9])(\d)(\d{4})(\d{4})]]></regex><replacement>$1$2$3****$5</replacement></replace><replace><!-- 固定电话: XXXX-XXXXXXXX或XXX-XXXXXXXX,保留区号+前2后2 --><regex><![CDATA[([\d]{3,4}-)(\d{2})(\d{4})(\d{2})]]></regex><replacement>$1$2****$4</replacement></replace><replace><!-- security自带测试密码--><regex><![CDATA[.*(Using generated security).*]]></regex><replacement></replacement></replace><replace><!--ip --><regex><![CDATA[(?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])(?![0-9])]]></regex><replacement>***</replacement></replace></replaces></encoder></appender><!--log4jdbc --><logger name="org.apache.ibatis" level="debug"/><logger name="java.sql" level="debug"/><root level="info"><appender-ref ref="console"/><appender-ref ref="file"/></root></configuration>

这篇关于logback 日志脱敏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/975974

相关文章

Sapphire开发日志 (十) 关于页面

关于页面 任务介绍 关于页面用户对我组工作量的展示。 实现效果 代码解释 首先封装一个子组件用于展示用户头像和名称。 const UserGrid = ({src,name,size,link,}: {src: any;name: any;size?: any;link?: any;}) => (<Box sx={{ display: "flex", flexDirecti

linux匹配Nginx日志,某个字符开头和结尾的字符串

匹配 os=1 开头, &ip结尾的字符串 cat 2018-06-07.log | egrep -o ‘os=1.*.&ip’ 存入日志。然后使用submit 前面和后面的值去掉,剩下就是需要的字符串。 cat 2018-06-07.log | egrep -o ‘os=1.*.&ip’ >log.log

springboot学习02-[热部署和日志]

热部署和日志 热部署 热部署

C# 日志框架Serilog使用

1、框架和说明        C#日志框架Serilog支持多种场景输出,简单验证了一下,比较方便        包的安装,推荐直接使用“推荐NuGet包管理器”安装Serilog.AspNetCore,常见的组件都已经集成在一个包中,使用比较方便 2、配置文件        Serilog可以由配置文件来定义行为,而且配置文件的修改即时生效。参考配置文件如下: {"Serilog":

Android Log日志 - 打印不全问题

AndroidStudio在打印Log的时候目前支持4*1024长度,超出部分不能打印。当你在各种百度之后有对应的解决办法,但是每次都是部分代码,看着都忧伤。索性此次项目调试的数据也是比较多滴,目前就准备对Log开刀来写一个Log类,还是如以往的性格直接写完整的类,方便需要的人用。反正又不是什么高深的东西,为了给被方便同时也是给自己方便。 /*** Relin* 2019-07-10 10:40

注解+Aspect 省时省力的管理好接口日志

背景 无论是对外提供的RPC接口,还是项目内的普通方法,我们都会有需要打印方法入参、出参的需求,方便在遇到问题时通过查看日志快速定位,我们也会需要对方法的执行时间进行打印 方便分析和调优。 比较笨的做法就是在每个需要打印日志的地方使用log.info对参数进行打印,在每个方法内部方法体前后获取系统时间 在最后打印时间差 但这种对方法自身业务逻辑没有什么意义的的代码 侵入性太强 编写时也浪费时间

linux crontab 重启、关闭、开启命令,查看cron日志

计划任务文件位置:var/spool/ 一、 重启: /etc/rc.d/init.d/crond restart 或者 service crond restart 关闭: /etc/rc.d/init.d/crond stop 或者 service crond stop 开启: /etc/rc.d/init.d/crond start 或者 service crond start 二、 查看任

yii2 自定义写入日志

/*** log* $message 消息* $reference array 数组*/public static function log($message, $reference = []){$message = count($reference) ? $message.PHP_EOL.print_r($reference, true) : $message;if (YII_DEBUG)

20240621日志:大模型压缩-从闭源大模型蒸馏

目录 1. 核心内容2. 方法2.1 先验估计2.2 后验估计2.3 目标函数 3. 交叉熵损失函数与Kullback-Leibler(KL)损失函数 location:beijing 涉及知识:大模型压缩、知识蒸馏 Fig. 1 大模型压缩-知识蒸馏 1. 核心内容 本文提出在一个贝叶斯估计框架内估计闭源语言模型的输出分布,包括先验估计和后验估计。先验估计的目的是通

MapReduce 实践题:Web 访问日志分析与异常检测

文章目录 作业描述MapReduce 实践题:Web 访问日志分析与异常检测题目背景数据集说明任务要求输入数据示例输出数据示例实现步骤 解题思路1. 数据预处理2. 访问统计3. 异常检测4. 主方法5. 结果输出 作业描述 MapReduce 实践题:Web 访问日志分析与异常检测 题目背景 你被要求设计和实现一个基于 MapReduce 的大规模 Web 访问日志分析