MaskingJsonGeneratorDecorator
メソッドを使用してログメッセージに追加されたネストされたオブジェクトのフィールドをマスクするために を使用しようとしていますMarkers.appendRaw("body": <my-json-value>)
。
このような JSON 文字列の例は次のとおりです。
{"timestamp":"2021-10-26T22:41:29.471+02:00","message":"Response GET /examples/ ","level":"INFO", "body":[{"id":1,"password": "ABC"},{"id":2,"password":"DEF"},{"id":3,"password":"my-super-secure-password"}]"}
logback-spring.xml
このようにファイルをセットアップしました
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<jsonGeneratorDecorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
<defaultMask>****</defaultMask>
<path>password</path>
<!-- I've also tried /body/*/password, or */password -->
</jsonGeneratorDecorator>
<fieldNames>
<timestamp>timestamp</timestamp>
<message>message</message>
<version>[ignore]</version>
<levelValue>[ignore]</levelValue>
</fieldNames>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
期待される結果は次のようになります。
{"timestamp":"2021-10-26T22:41:29.471+02:00","message":"Response GET /examples/ ","level":"INFO", "body":[{"id":1,"password": "****"},{"id":2,"password":"****"},{"id":3,"password":"****"}]"}
しかし、私はマスキングをしていません。
コードをデバッグしようとしましたが、クラスがオブジェクトPathBasedFieldMasker
をドリルダウンできないようです。body
一時的な解決策として、ログに記録する前に JSON 文字列をマスクするクラスを作成しましたが、最適ではないようです。
ネストされたフィールドでマスキングが正しく行われるようにするために何かすべきことはありますか?