简易的第三方组件日志脱敏

1.下载jar包并打入自己的本地仓库

在这里插入图片描述
随便找个地儿,mvn -v确保maven仓库配置正确
在jar所在文件夹打开cmd终端,键入

mvn install:install-file -DgroupId=pers.liuchengyin -DartifactId=logback-desensitization -Dversion=1.0.0 -Dpackaging=jar -Dfile=logback-desensitization-1.0.0.jar

2.依赖

        <dependency>
            <groupId>pers.liuchengyin</groupId>
            <artifactId>logback-desensitization</artifactId>
            <version>1.0.0</version>
        </dependency>

3.日志依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

4.脱敏规则-logback-desensitize.yml

# 日志脱敏
log-desensitize:
  # 是否忽略大小写匹配,默认为true
  ignore: true
  # 是否开启脱敏,默认为false
  open: true
  # pattern下的key/value为固定脱敏规则
  pattern:
    # 邮箱 - @前第4-7位脱敏
    email: "@>(4,7)"
    # qq邮箱 - @后1-3位脱敏
    qqemail: "@<(1,3)"
    # 姓名 - 姓脱敏,如*杰伦
    name: 1,1
    # 密码 - 所有需要完全脱敏的都可以使用内置的password
    password: password
  patterns:
    # 身份证号,key后面的字段都可以匹配以下规则(用逗号分隔)
    - key: identity,idcard
      # 定义规则的标识
      custom:
        # defaultRegex表示使用组件内置的规则:identity表示身份证号 - 内置的18/15位
        - defaultRegex: identity
          position: 9,13
        # 内置的other表示如果其他规则都无法匹配到,则按该规则处理
        - defaultRegex: other
          position: 9,10
    # 电话号码,key后面的字段都可以匹配以下规则(用逗号分隔)
    - key: phone,cellphone,mobile
      custom:
        # 手机号 - 内置的11位手机匹配规则
        - defaultRegex: phone
          position: 4,7
        # 自定义正则匹配表达式:座机号(带区号,号码七位|八位)
        - customRegex: "^0[0-9]{2,3}-[0-9]{7,8}"
          # -后面的1-4位脱敏
          position: "-<(1,4)"
        # 自定义正则匹配表达式:座机号(不带区号)
        - customRegex: "^[0-9]{7,8}"
          position: 3,5
        # 内置的other表示如果其他规则都无法匹配到,则按该规则处理
        - defaultRegex: other
          position: 1,3
    # 这种方式不太推荐 - 一旦匹配不上,就不会脱敏
    - key: localMobile
      custom:
        customRegex: "^0[0-9]{2,3}-[0-9]{7,8}"
        position: 1,3

5.logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--spring boot提供的logback的默认配置,必须引用,否则日志无法输出-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <!--配置集中管理的属性-->
    <property resource="application.yml"/>

    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

    <!--定义日志文件的存储地址 -->
    <property name="LOG_HOME" value="logs"/>
    <property name="FILE_NAME" value="${LOG_HOME}/%d{yyyy-MM-dd}"/>
    <!--定义自己个日志格式-->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %c{50} %M %L -- %m%n"/>
    <!--
        %d{yyyy-MM-dd HH:mm:ss.SSS} 日期格式
        %c 类的完整名称
        %logger 类的完整名称
        %M 方法名
        %L 行号
        %thread 线程
        %m 信息
        %n 换行
        %-5level 信息级别
    -->

    <!-- 控制台输出 -->
    <appender name="STDOUT" class="pers.liuchengyin.logbackadvice.LcyConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${FILE_NAME}_all.txt</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>7</MaxHistory>
            <totalSizeCap>512MB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
            <!--<pattern>%JsonOutPut %n</pattern>-->
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件过滤消息级别 -->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${FILE_NAME}_err.txt</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>7</MaxHistory>
            <totalSizeCap>512MB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
            <!--<pattern>%JsonOutPut %n</pattern>-->
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--设置过滤级别-->
            <level>ERROR</level>
            <!--过滤级别以上的处理方式-->
            <onMatch>ACCEPT</onMatch>
            <!--过滤级别以下的处理方式-->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 按照每天生成HTML日志文件 -->
    <appender name="FILE_HTML" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${FILE_NAME}_all.html</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>7</MaxHistory>
            <totalSizeCap>512MB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}%-5level%thread%c{50}%M%L%m</pattern>
            </layout>
        </encoder>
    </appender>
    <!--异步日志-->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <!--指定需要异步打印的日志-->
        <appender-ref ref="FILE" />
    </appender>

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="FILE_HTML"/>
        <appender-ref ref="FILE_ERROR"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>


6.application.yml

logging:
  config: classpath:logback.xml

7.logback.xml种替换成脱敏的类

①ConsoleAppender - 控制台脱敏

// 原类
ch.qos.logback.core.ConsoleAppender
// 替换类
pers.liuchengyin.logbackadvice.LcyConsoleAppender

②RollingFileAppender - 滚动文件

// 原类
ch.qos.logback.core.FileAppender
// 替换类
pers.liuchengyin.logbackadvice.LcyFileAppender

③FileAppender - 文件

// 原类
ch.qos.logback.core.FileAppender
// 替换类
pers.liuchengyin.logbackadvice.LcyFileAppender

替换示例:

  <!-- 控制台输出 -->
      <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>
    替换
    <appender name="STDOUT" class="pers.liuchengyin.logbackadvice.LcyConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>

8.测试

@SpringBootApplication
@Slf4j
public class LogApplication {
    public static void main(String[] args) {
        SpringApplication.run(LogApplication.class , args);
        log.info("your email:{}, your phone:{}", "123456789@qq.com","15310763497");
        log.info("your name:{}", "周杰伦");
        log.info("your password:{}" , "15310763497");
        log.info("your identity:{}", "4408821777708052456");
        log.info("your identity:{}", "440882199910");
    }
}

9.demo结构

在这里插入图片描述

10.gitee地址

https://gitee.com/xulehuang/example/tree/master/log-tuo-min

11.参考

12.资源以上传

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值