我们只需要在 sql 日志文件中屏蔽 SSN(9 位),而不是 Order No(9 位)。有一个问题 - 一个号码 (123456789) 可以同时是 SSN 和订单号。我们如何区分两者,使一个被屏蔽,另一个不被屏蔽。
还有一个问题 - sql 日志不是我们创建的,它们是由我们正在使用的 jar 的内置类创建的,让我解释一下我的意思。
Log4j.xml 代码如下
<appender name="SQL_logfile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="../logs/sql.log" />
<layout class="CustomFilterLayout;">
<param name="ConversionPattern" value="[%d{ISO8601}{CST}] [%p] [%X{ipAddress}] [%X{userID}] [%t] [%c] - %m%n" />
</layout>
</appender>
<appender name="async_SQL_logfile" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="SQL_logfile"/>
</appender>
<logger name="java.sql" additivity="false">
<level value="DEBUG" />
<appender-ref ref="async_SQL_logfile" />
</logger>
DAO 文件代码如下
public List<TestDelivery> getTestDelivery(long SSN, long orderNo)
{
List<TestDelivery> testDeliveryList = new ArrayList<>();
Map<String, Object> params = new HashMap<>();
params.put("SSN", SSN);
params.put("orderNo", orderNo);
try {
testDeliveryList = (List<TestDelivery>) getSqlMapClientTemplate().queryForList("getTestDelivery", params);
} catch(Exception e) {
}
return testDeliveryList;
}
问题是写入的日志是由我们无法控制的 getSqlMapClientTemplate 类自动完成的,并且日志打印如下
Params -> (SSN,123456789),(orderNo,123456789)
但是我们希望日志打印如下,并且我们无法屏蔽在 DAO 类 getTestDelivery 方法中的参数中发送的 SSN 值,因为该值被传递以获取 TestDelivery 列表。我们只希望在日志中屏蔽 SSN。
Params -> (SSN,#########),(orderNo,123456789)