我必须屏蔽日志中的敏感信息,但仅部分。例如,我需要替换电子邮件'kate@example.com'带有'k***@e***'有可能用logstash logback编码器做到这一点吗?
目前我使用这个logback.xml:
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<fieldNames>
<timestamp>timestamp</timestamp>
</fieldNames>
</encoder>
<!-- see https://github.com/logfellow/logstash-logback-encoder#identifying-field-values-to-mask-by-value -->
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<jsonGeneratorDecorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
<value>(w+@w+.w+)</value>
<path>message/*</path>
</jsonGeneratorDecorator>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
我得到了:
{"@时间戳":"2021-12-21T17:15.072+02:00","@版本":"1","消息":"电子邮件=********"INFO"、"level_value":20000}
我更喜欢LogEvent(电子邮件=k***@e***vs电子邮件=***
是。掩码可以引用值regex中的捕获组。
类似这样的东西:
<valueMask>
<value>(w)w*@(w)w*.(w)w*</value>
<mask>$1****@$2****.$3****</mask>
</valueMask>