logback日志脱敏、FASTJSON日志脱敏

目录

一、日志脱敏

1.logback转换器实现日志脱敏

创建自定义转换器

logback.xml追加conversionRule配置

2.FASTJSON序列化实现日志脱敏

toJSONString方法介绍

创建自定义过滤器


一、日志脱敏

1.logback转换器实现日志脱敏

创建自定义转换器

logback自定义转换器不需要修改原来代码,在日志打印时可以对参数自动处理,可维护性强。logback官方文档convert转换器介绍

创建自定义转换类MySampleConverter, 继承MessageConverter类,并实现convert方法。

java 复制代码
import ch.qos.logback.classic.pattern.MessageConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
 
public class MySampleConverter extends MessageConverter {
    public String convert(ILoggingEvent event) {
        return event.getFormattedMessage();
    }
}

让我们来看一下event里面是什么

介不就是格式化后的日志吗!怎么改呢?加密算法可以自己选。

比如这样:

java 复制代码
 public class MySampleConverter extends MessageConverter {
 
    @Override
    public String convert(ILoggingEvent event) {
        String formattedMessage = event.getFormattedMessage();
        //TODO 1.找到FormattedMessage中idNum的位置
 
        //TODO 2.获取idNum的值并进行MD5加密 DigestUtils.md5DigestAsHex("".getBytes());
 
        //TODO 3.将加密后的值替换到原来的位置
        return formattedMessage;
    }
}

或者这样:

java 复制代码
public class MySampleConverter extends MessageConverter {
 
    @Override
    public String convert(ILoggingEvent event) {
        //TODO 1.获取需要格式化的参数数组
        Object[] argumentArray = event.getArgumentArray();
        if (null != argumentArray) {
            //TODO 2.循环对数组中的idNum加密 DigestUtils.md5DigestAsHex("".getBytes());
 
            //TODO 3.将加密后的数组进行格式化
            
            return MessageFormatter.arrayFormat(event.getMessage(), argumentArray).getMessage();
        } else {
            return event.getFormattedMessage();
        }
    }
 
}

就是提供个思路,长得帅的哥们自己琢磨吧。

logback.xml追加conversionRule配置

XML 复制代码
<!-- 当前配置一定要加到第一行,放到下面会不生效 -->
<conversionRule conversionWord="msg" converterClass="com.api.filter.MySamepleConverter"></conversionRule>

2.FASTJSON序列化实现日志脱敏

toJSONString方法介绍

我们打印日志的时候会用JSON.toJSONString() 对对象进行序列化,要不然打印出来的就是一串看不懂的内存地址。可以看到toJSONString的方法的参数可以传SerializeFilter接口。

看下SerializeFilter接口的实现类都有哪些,显然这个ValueFilter可以对要序列化的值进行过滤。

创建自定义过滤器

我们只需要自定义一个SimpleValueFilter类,实现ValueFilter接口,重写process方法,匹配到需要加密的字段进行加密返回即可。

java 复制代码
/**
 * @author xrh
 * @date 2022-09-21
 * @description 打印日志时对敏感信息加密
 */
public class SimpleValueFilter implements ValueFilter {
 
    private List filterName = Arrays.asList("idNum", "certNo");
 
    @Override
    public Object process(Object obj, String name, Object value) {
        try {
            if (filterName.contains(name)) {
                return DigestUtils.md5DigestAsHex(value.toString().getBytes());
            }
        } catch (Exception e) {
            return value;
        }
        return value;
    }
 
    private static final SimpleValueFilter simpleValueFilter = new SimpleValueFilter();
 
    public static SimpleValueFilter getInstance() {
        return simpleValueFilter;
    }
}
java 复制代码
Personal personal = new Personal();
personal.setIdNum("4112723199909083216");
log.info("查询个人信息结果:{},当前用户:{}", JSON.toJSONString(personal,SimpleValueFilter.getInstance()), "xrh");
相关推荐
sun༒5 天前
Logback 日志框架总结:从入门到实战
单元测试·logback
.柒宇.11 天前
ELK日志分析系统实战指南:Elasticsearch搭建与入门(8.18.8版本)
运维·elk·elasticsearch·logback·日志系统
hdsoft_huge12 天前
SpringBoot系列17:日志体系Logback配置,日志分割、脱敏、异常堆栈收集规范(生产级落地)
java·spring boot·logback
倒流时光三十年13 天前
Logback 系列(13):生产环境配置建议清单
logback
倒流时光三十年13 天前
Logback 系列(12):高级篇 · MDC 链路追踪
logback
倒流时光三十年14 天前
Logback 系列(3):三大核心组件 Logger / Appender / Encoder
java·开发语言·logback
倒流时光三十年14 天前
Logback 系列(7):常用 Appender(控制台 / 文件 / 滚动文件)
java·前端·logback
倒流时光三十年14 天前
Logback 系列(6):Pattern 布局语法速查
logback
我是唐青枫17 天前
Java SLF4J 实战指南:从日志门面到 Logback、MDC 和链路追踪
java·开发语言·logback
豆瓣鸡1 个月前
整合Logback日志框架
logback