4

我维护一个充当 JSON API 服务的 Sinatra 应用程序。该 API 由另一个 Web 应用程序以及移动应用程序使用。

我想让 Rack::CommonLogger 从其日志中排除敏感信息,如密码。Rails 启用了此设置,但我没有找到有关如何在 Sinatra 中执行此操作的文档。

4

3 回答 3

5

您可以尝试拦截调用以写入和过滤掉敏感消息,如下所示:

logger = Logger.new("my_common.log")
logger.instance_eval do
  def write(msg)
    self.send(:<<, msg) if !msg.match /SUPER SENSITIVE INFO HERE/
  end
end

然后,配置 Rack::CommonLogger 以使用此记录器实例:

config.middleware.use Rack::CommonLogger, logger
于 2013-03-13T13:48:06.027 回答
0

Sinatra 登录到 STDERR,这是一个 IOm,但我们不想存储其他人的密码:

module NoTokenLogging
  def write(*args)
    args.first.sub!(/password=\S+/, "password=[FILTERED]")
    super
  end
end
IO.prepend NoTokenLogging
于 2015-03-04T06:41:03.273 回答
0

您也可以仅利用ActiveSupport::ParameterFilter.

https://edgeapi.rubyonrails.org/classes/ActiveSupport/ParameterFilter.html

于 2020-06-08T19:23:41.780 回答