日志数据脱敏方法研究

标签: dev | 发表时间:2018-12-23 00:00 | 作者:
出处:http://itindex.net/relian

日志文件中的敏感信息比如密码,电话号码等等进行过滤处理。第一个想到的方法就是去 log4j 中自定义 Appender,在 Appender 中正则匹配敏感信息进行过滤。

log4j 日志框架在 之前的文章中也也说过,主要有三个组件,Logger,Appenders 和 Layout,要过滤日志内容解决方法也就是从这三个地方着手。

log 时手动处理

Logger 着手就是在打日志的时候就处理,从根源解决。最精确的处理就是在每个类敏感的字段上手动处理,在打印日志时,封装方法手动转换 String 。这种方法唯一的缺点就是对于一个大型成熟的系统,要修改的日志打印地方太多,更本无法顾及。所以还需要寻找统一的方法。

自定义 Appender

如果从根源上没有解决,接下来就是在 Appender 中,Appender 决定了日志往哪里输出,那么这个时候就可以重写 subAppend 方法重新修改 LogEvent 来修改日志信息,将敏感的内容移除。比如

     import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.spi.LoggingEvent;

public class DesensitizeDailyRollingFileAppender extends DailyRollingFileAppender {

    @Override
    protected void subAppend(LoggingEvent event) {
        String message = (String) event.getMessage();
        // do your stuff
        LoggingEvent modifiedEvent = new LoggingEvent(event.getFQNOfLoggerClass(), event.getLogger(), event.getTimeStamp(), event.getLevel(), modifiedMessage,
                event.getThreadName(), event.getThrowableInformation(), event.getNDC(), event.getLocationInformation(),
                event.getProperties());
        super.subAppend(event);
    }
}

扩展 PatternLayout

最后,如果自定义 Appender 的话,那么每一个日志删除的目的 Appender 都要手动实现一下,这个时候如果复写 PatternLayout 就可以让多个 Appender 来使用。

定义自己的 PatternLayout ,然后在配置文件 Appender 指定用我们自己的实现的 PatternLayout。

     import java.lang.reflect.Field;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.spi.LoggingEvent;

public class DesensitizeLayout extends PatternLayout {

    @Override
    public String format(LoggingEvent event) {
        if (event.getMessage() != null && event.getMessage() instanceof String) {
            String message = event.getMessage().toString();
            // do your stuff to change message
            try {
                Field msgField = LoggingEvent.class.getDeclaredField("message");
                msgField.setAccessible(true);
                msgField.set(event, message);
            } catch (NoSuchFieldException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return super.format(event);
    }
}

RewritePolicy

如果使用的是 log4j 2.x 版本,也可以使用这种方法重写 RewritePolicy,然后 Override rewrite 方法。

总结

通过自定 Appender 或者 PatternLayout 可以实现敏感信息的脱敏,那么其实扩展可以实现其他的同类业务。比如固定格式输出,比如打印日志到内部日志收集器等等。

reference

相关 [日志 数据 方法] 推荐:

日志数据脱敏方法研究

- - IT瘾-dev
日志文件中的敏感信息比如密码,电话号码等等进行过滤处理. 第一个想到的方法就是去 log4j 中自定义 Appender,在 Appender 中正则匹配敏感信息进行过滤. log4j 日志框架在 之前的文章中也也说过,主要有三个组件,Logger,Appenders 和 Layout,要过滤日志内容解决方法也就是从这三个地方着手.

Logstash处理json格式日志文件的三种方法_数据库_很多时候,你缺少的不是知识而是热情-CSDN博客

- -
假设日志文件中的每一行记录格式为json的,如:. 默认配置下,logstash处理插入进elasticsearch后,查到的结果是这样的:. 即会将json记录做为一个字符串放到”message”下,但是我是想让logstash自动解析json记录,将各字段放入elasticsearch中. 第一种,直接设置format => json.

日志分析方法概述

- jin - 搜索研发部官方博客
日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核、各种应用服务器等等. 日志的内容、规模和用途也各不相同,很难一概而论. 本文讨论的日志处理方法中的日志,仅指Web日志. 其实并没有精确的定义,可能包括但不限于各种前端Web服务器——apache、lighttpd、tomcat等产生的用户访问日志,以及各种Web应用程序自己输出的日志.

百度搜索研发部:日志分析方法概述

- wuwu - 标点符
日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核、各种应用服务器等等. 日志的内容、规模和用途也各不相同,很难一概而论. 本文讨论的日志处理方法中的日志,仅指Web日志. 其实并没有精确的定义,可能包括但不限于各种前端Web服务器——apache、lighttpd、tomcat等产生的用户访问日志,以及各种Web应用程序自己输出的日志.

Oracle EBS SQL Trace日志收集的方法

- - CSDN博客推荐文章
Raw Trace的收集方法. 打开Trace,Help > Diagnostics > Trace > Trace > Trace with Binds and Waits. Trace项代表的意思. 3.关闭Trace,Help > Diagnostics > Trace > Trace > No Trace.

网络数据的背后——网络日志的分析指标

- cRabdanceR - 腾讯CDC
  常用的定量分析是问卷调查,这可以收集到用户对产品的主观反馈,它的结果受问卷题目的影响,不能完全客观地反映用户如何使用产品,他们在实际环境中遇到了哪些问题. 而针对网站的定量分析,网络服务器的日志文件能真实反映用户的当前体验,解释行为的深层特点,能够更有效地改进产品.   网络日志可以帮我们回答很多问题,比如用户在什么时间段浏览网站;对网站的什么板块比较感兴趣;是怎样了解到网站;多少用户会转成重复用户;在网站上找到兴趣点的路径是什么;应该怎样优化使用过程,提高用户体验,等等.

Mysql数据库日志,备份及回滚操作

- - CSDN博客数据库推荐文章
一、打开二进制日志配置 :. 在Windows系统下,对mysql的my.ini的log-bin等进行配置目录位置时,假设要将log-bin的日志配置到D盘的mysqllog的文件为binlog. log-bin="D:\mysqllog/binlog"  注意:在这里的最后一个路径采用的是"/"而不是Windows文件系统的“\".

java调用kettle api 操作日志写入到数据库表

- - 开源软件 - ITeye博客
//将step日志数据库配置名加入到变量集中. //StepLogTable使用的数据库连接名(上面配置的变量名). //设置Step日志的表名. //设置TransMeta的StepLogTable. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.