Springframework调试ResponseBody的日志记录

时间:2015-07-06 06:25:55

标签: spring spring-mvc logging

我有一个场景,我在弹簧控制器的ResponseBody中发送一些敏感数据。 Spring以DEBUG模式记录整个响应主体,在那里我也可以看到敏感数据。现在,如果我将我的应用程序配置为仅打印INFO日志或更高版本,则不会显示,但这不是一种万无一失的方法,因为可能会意外打开DEBUG模式。

无论如何,我可以禁止响应正文中的某些字段被Spring记录吗?

由于

1 个答案:

答案 0 :(得分:1)

我的建议是你实现一个自定义转换器用于logback(如果那是你的日志库) http://logback.qos.ch/manual/layouts.html#customConversionSpecifier

它使您能够转换日志记录数据并模糊应从消息中删除的任何数据。 从文档中可以很直接

public class MySampleConverter extends ClassicConverter {

  long start = System.nanoTime();

  @Override
  public String convert(ILoggingEvent event) {
    long nowInNanos = System.nanoTime();
    return Long.toString(nowInNanos-start);
  }
}

和配置

<configuration>

  <conversionRule conversionWord="nanos" 
                  converterClass="chapters.layouts.MySampleConverter" />

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%-6nanos [%thread] - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

如果您正在使用Log4j,则可以实现自定义过滤器,该过滤器将屏蔽每个布局的数据 http://vozis.blogspot.sg/2012/02/log4j-filter-to-mask-payment-card.html

编辑 最后更简单的解决方案是覆盖返回对象的toString。 Spring使用toString来记录返回消息