【问题标题】:Logstash logback encoder not masking nested fieldLogstash logback 编码器不屏蔽嵌套字段
【发布时间】:2021-12-12 11:50:17
【问题描述】:

我正在尝试使用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 字符串的类,但它对我来说似乎不是最理想的。

我应该做些什么来使掩码在嵌套字段中正确发生?

【问题讨论】:

    标签: json logging logstash logback logstash-logback-encoder


    【解决方案1】:

    屏蔽不适用于Markers.appendRaw。使用 Markers.appendRaw 时,应用程序将完全负责提供准确的 JSON 输出。换句话说,logstash-logback-encoder 根本不处理传递给 appendRaw 的值。

    您有几个选项可以让掩蔽工作...

    选项 1:不使用 appendRaw,而是让 logstash-logback-encoder 通过将对象或数组传递给其他 append* 方法之一来序列化值。这将导致 logstash-logback-encoder 将对象/数组序列化为 JSON。正是在这个序列化过程中发生了屏蔽。

    选项 2:使用MaskingJsonGenerator 生成要传递给appendRaw 的屏蔽值。

    【讨论】:

      猜你喜欢
      • 2015-11-25
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      相关资源
      最近更新 更多