0

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 文字列をマスクするクラスを作成しましたが、最適ではないようです。

ネストされたフィールドでマスキングが正しく行われるようにするために何かすべきことはありますか?

4

1 に答える 1