使用Sinatra和Rack Logger过滤敏感信息

时间:2013-03-13 01:32:15

标签: ruby logging sinatra rack

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

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

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分: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

希望这有帮助

答案 1 :(得分:0)

sinatra记录到stderr,这是一个IOm,但我们不想存储其他人的密码

module NoTokenLogging
  def write(*args)
    args.first.sub!(/password=\S+/, "password=[FILTERED]")
    super
  end
end
IO.prepend NoTokenLogging

答案 2 :(得分:0)

您还可以利用ActiveSupport::ParameterFilter

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