项目已经上线运行五年之久,积累了大量的用户身份数据。由于软件设计之初未对用户敏感字段与数据做脱敏加密处理,用户信息存在安全风险。本项目需求涉及到的客户敏感数据泄露风险点及系统改造风险点主要包括以下几个方面:
Ø 客户敏感信息:身份证号、手机号、银行卡号、住址等客户敏感数据。
Ø 与其他异构系统[i]接口交互使用明文传输
现在的log4j,apache不在更新版本,现在维护log4j2,同时用起来比较方便,
log4j2 的配置文件只用 xml、json、jsn 三种格式,默认情况下由系统自动加载,系统加载 classpath 目录如下的配置文件:
- log4j-test.json 或者 log4j-test.jsn 文件
- log4j2-test.xml
- log4j-test.json 或者 log4j-test.jsn 文件
- log4j2.xml
加载优先级由上向下,且只加载其一。
1、configration
字段 | 描述 |
---|---|
status | 日志级别 默认值为最高级别 OFF |
monitorInterval | 监控间隔,例如:monitorInterval=”600” 指log4j2每隔600秒(10分钟),自动监控该配置文件是否有变化,如果变化,则自动根据文件内容重新配置 |
2、Appenders 定义输出类型
1) Child
字段 | 描述 |
---|---|
Layout | 输出类型的模板、布局 |
Filters | 过滤器,过滤掉不需要的日志 |
2)Filters.ThresholdFilter
字段 | 描述 |
---|---|
level | 输出级别,例:level=”info”,日志级别为info或者以上(匹配的界别) |
onMatch | DENY/ACCEPT 禁止或者接受(是否接受匹配) |
onMismatch | DENY/NEUTRAL (是否接受其他高于level的级别) |
一般的组合为:
3、Loggers 注册日志输出对象
1) Logger 日志输出对象
字段 | 解释 |
---|---|
name | 输出对象名称 |
level | 日志级别 |
additivity | 是否冒泡,既在本层输出日志后是否需要在父对象上输出该日志,默认为 true |
代码说明
<Root level="info"> <AppenderRef ref="Appender3" />Root><logger level="warn" name="com.person" additivity="false"> <AppenderRef ref="Appender1" />logger><logger level="info" name="com.person.man" additivity="true"> <AppenderRef ref="Appender2" />logger>
在 com.person.man 包下面或者类下面执行以下代码
logger.info("man info"); // Appender1、Appender2 有输出
logger.error("man error"); // Appender1、Appender2 有输出
logger.warn("man warn"); // Appender1、Appender2 有输出
<configuration status="off" monitorInterval="600">
<properties>
<property name="LOG_HOME">logsproperty>
<property name="ERROR_FILE_NAME">myErrorproperty>
<property name="WARN_FILE_NAME">myWarnproperty>
<property name="INFO_FILE_NAME">myInfoproperty>
<property name="DEBUG_FILE_NAME">myDebugproperty>
properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} {%t} %-5level %logger{36} - %msg%n"/>
Console>
<File name="infoLog" fileName="E:/info.log" append="true" >
<PatternLayout pattern="%d %5p [%c:%l] - %m%n"/>
<Filters>
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
Filters>
File>
<File name="warnLog" fileName="E:/warn.log" append="true" >
<PatternLayout pattern="%d %5p [%c:%l] - %m%n"/>
<Filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
Filters>
File>
<File name="errorLog" fileName="E:/error.log" append="true" >
<PatternLayout pattern="%d %5p [%c:%l] - %m%n"/>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
Filters>
File>
Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="infoLog" />
<AppenderRef ref="warnLog" />
<AppenderRef ref="errorLog" />
Root>
Loggers>
configuration>
1、根据日志级别输出到不同文件,按日期进行封存日志
<configuration status="off" monitorInterval="600">
<properties>
<property name="LOG_HOME">E:/webbase/logsproperty>
<property name="LOG_BACK_HOME">${LOG_HOME}/backupproperty>
<property name="ERROR_FILE_NAME">errorproperty>
<property name="WARN_FILE_NAME">warnproperty>
<property name="INFO_FILE_NAME">infoproperty>
<property name="DEBUG_FILE_NAME">debugproperty>
properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} {%t} %-5level %logger{36} - %msg%n"/>
Console>
<RollingFile name="ErrLog" fileName="${LOG_HOME}/${ERROR_FILE_NAME}.log" filePattern="${LOG_BACK_HOME}/$${date:yyyy-MM}/${ERROR_FILE_NAME}.%d{yyyy-MM-dd}.log" append="true">
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
Policies>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
Filters>
RollingFile>
<RollingFile name="WarnLog" fileName="${LOG_HOME}/${WARN_FILE_NAME}.log" filePattern="${LOG_BACK_HOME}/$${date:yyyy-MM}/${WARN_FILE_NAME}.%d{yyyy-MM-dd}.log" append="true">
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
Policies>
<Filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
Filters>
RollingFile>
<RollingFile name="InfoLog" fileName="${LOG_HOME}/${INFO_FILE_NAME}.log" filePattern="${LOG_BACK_HOME}/$${date:yyyy-MM}/${INFO_FILE_NAME}.%d{yyyy-MM-dd}.log" append="true">
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
Policies>
<Filters>
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
Filters>
RollingFile>
<RollingFile name="DebugLog" fileName="${LOG_HOME}/${DEBUG_FILE_NAME}.log" filePattern="${LOG_BACK_HOME}/$${date:yyyy-MM}/${DEBUG_FILE_NAME}.%d{yyyy-MM-dd}.log" append="true">
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
Policies>
<Filters>
<ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
Filters>
RollingFile>
Appenders>
<Loggers>
<Logger name="org.webbase" level="debug" additivity="true">
<AppenderRef ref="DebugLog" />
<AppenderRef ref="InfoLog" />
Logger>
<Root level="warn">
<AppenderRef ref="WarnLog" />
<AppenderRef ref="ErrLog" />
<AppenderRef ref="Console"/>
Root>
Loggers>
configuration>
TimeBasedTriggeringPolicy
属性 | 解释 |
---|---|
interval | (integer)该属性是相对 RollingFile.filePattern 中的 %d{yyyy-MM-dd}值,例: filePattern=”xxx%d{yyyy-MM-dd}xx” interval=”2” 表示将2天一个日志文件; filePattern=”xxx%d{yyyy-MM-dd-HH}xx” interval=”1”表示一个小时一个日志文件 |
modulate | (boolean)以0点为边界进行偏移计算 |
第一是pom文件的配置