使用Logback屏蔽密码?

Sin*_*hot 7 java passwords logging logback masking

我们目前通常会记录进出系统的所有XML文档,其中一些文档包含明确的密码.我们希望能够配置执行此操作的logback logger/appender来执行某些模式匹配或类似操作,如果它检测到存在替换它的密码(最有可能使用星号).注意我们不想过滤掉日志条目,我们想要屏蔽它的一部分.我很感激有关如何使用logback完成此操作的建议.谢谢.

Cek*_*eki 19

logback版本0.9.27引入了替换功能.替换支持正则表达式.例如,如果记录的消息是"userid = alice,pswd ='my secret'",则输出模式为

  "%d [%t] $logger - %msg%n",
Run Code Online (Sandbox Code Playgroud)

你只需将模式修改为

 "%d [%t] $logger - %replace(%msg){"pswd='.*'", "pswd='xxx'"}%n"
Run Code Online (Sandbox Code Playgroud)

请注意,上面使用了选项引用.

之前的日志消息将输出为"userid = alice,pswd ='xxx'"

对于超强性能,您还可以将日志语句标记为CONFIDENTIAL,并指示%replace仅对标记为CONFIDENTIAL的日志语句执行替换.例,

 Marker confidential = MarkerFactory.getMarker("CONFIDENTIAL");
 logger.info(confidential, "userid={}, password='{}'", userid, password);
Run Code Online (Sandbox Code Playgroud)

不幸的是,当前版本的logback还不支持条件替换(基于标记或其他).但是,您可以通过扩展ReplacingCompositeConverter轻松编写自己的替换代码.如果您需要进一步的帮助,请在logback用户邮件列表上大喊大叫.