【发布时间】:2019-11-18 08:58:46
【问题描述】:
打印日志的时候,想把电话号码和身份证中间挡住。我不想更改每个实体类中的 toString 方法。有没有办法从长字符串中替换电话号码?
【问题讨论】:
-
你使用什么日志框架?
-
我们使用 logback 框架。
标签: java expression
打印日志的时候,想把电话号码和身份证中间挡住。我不想更改每个实体类中的 toString 方法。有没有办法从长字符串中替换电话号码?
【问题讨论】:
标签: java expression
您可能会通过使用包装器装饰您正在记录的对象来获得一些成功,该包装器了解各种字段的敏感性。
一个非常基本的例子...
class NumberHidingDecorator {
private final Object decorated;
public NumberHidingDecorator(Object decorated) {
this.decorated = decorated;
}
@Override
public String toString() {
return decorated.toString().replaceAll("(\d{2})\d+(\d{2})", "$1...$2");
}
}
并将装饰对象传递给您的日志记录工具
log.info("Invalid credit card {}", new NumberHidingDecorator(creditCard));
【讨论】: