在打印日志时,我想阻止电话号码和身份证的中间。我不想在每个实体类中更改toString方法,是否有某种方法可以替换长String中的电话号码?

最佳答案

通过使用知道各种字段敏感度的包装器装饰正在记录的对象,您可能会取得一些成功。

一个非常基本的例子

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));

10-05 21:12