当前,我们通常记录所有进出我们系统的XML文档,其中一些包含明文密码。我们希望能够配置执行此操作的logback logger / appender进行某种模式匹配或类似操作,并且如果它检测到存在替换它的密码(很可能带有星号)。注意,我们不想过滤掉日志条目,我们想掩盖其中的一部分。我很乐意提供有关如何通过注销执行此操作的建议。谢谢。
0.9.27版本的logback引入了替换功能。替换支持正则表达式。例如,如果记录的消息是“ userid = alice,pswd =’my secret’”,并且输出模式为
"%d [%t] $logger - %msg%n",
您只需将模式修改为
"%d [%t] $logger - %replace(%msg){"pswd='.*'", "pswd='xxx'"}%n"
请注意,以上内容使用了选项引用。
先前的日志消息将输出为“ userid = alice,pswd =’xxx’”
为了获得出色的性能,您还可以将日志语句标记为CONFIDENTIAL,并指示%replace仅执行替换为标记为CONFIDENTIAL的日志语句。例,
Marker confidential = MarkerFactory.getMarker("CONFIDENTIAL"); logger.info(confidential, "userid={}, password='{}'", userid, password);
不幸的是,当前版本的logback尚不支持条件替换(基于标记或其他方式)。但是,您可以通过扩展ReplacingCompositeConverter轻松编写自己的替换代码。如果您需要进一步的帮助,请在登录用户的邮件列表中大喊大叫。