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

Posted Fire king

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简易的第三方组件日志脱敏相关的知识,希望对你有一定的参考价值。

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

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/%dyyyy-MM-dd"/>
    <!--定义自己个日志格式-->
    <property name="PATTERN" value="%dyyyy-MM-dd HH:mm:ss.SSS %-5level [%thread] %c50 %M %L -- %m%n"/>
    <!--
        %dyyyy-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>%dyyyy-MM-dd HH:mm:ss.SSS%-5level%thread%c50%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.资源以上传

以上是关于简易的第三方组件日志脱敏的主要内容,如果未能解决你的问题,请参考以下文章

php正则 匹配 手机、座机号码

区号+座机号+分机号正则匹配规则

基于antd封装的固话组件

这个开源组件太强了,仅需三步完成 SpringBoot 日志脱敏

巴基斯坦打山东省菏泽市的座机号加啥?

这个开源组件太强了,仅需三步完成 SpringBoot 日志脱敏