首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >减少日志记录Rails 5

减少日志记录Rails 5
EN

Stack Overflow用户
提问于 2020-01-23 10:18:17
回答 2查看 402关注 0票数 1

我有一个Rails 5应用程序,可以监听第三方服务中的事件。这个第三方服务不断地将事件流到我的应用程序中,这些事件向我的应用程序发出了几个请求,因此,很多请求日志都与我的应用程序无关。我希望能够完全消除请求日志,只对可以处理的相关事件进行日志记录,但是对于不相关的事件,没有点日志记录。

所以我有一个带有create操作的EventsController。这一行动

代码语言:javascript
复制
class EventsController
  before_action :ensure_valid_event, only: :create

  def create
    ...
    process_event
    ...
  end

  private

  def ensure_valid_event
    unless Event.exists?(event_name: params[:event])
      head :ok
    end
  end

end

不使用宝石做这件事的最好方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-23 10:38:51

解决这个问题的最简单的方法--我想我们会帮你的忙--是:

  1. 完全禁用从配置/环境文件
  2. 重新启用的日志记录,以便只为有效事件(

)创建操作

若要禁用日志记录,请编辑正确的环境配置文件。例如:config/environments/production.rb并将config.logger行替换为:

代码语言:javascript
复制
config.logger = Logger.new("/dev/null")

现在在您的events_controller中,请做:

代码语言:javascript
复制
class EventsController

  before_action :enable_logging, only: :create
  after_action :disable_logging, only: :create

  private

  def enable_logging
    if valid_event?
      Rails.logger = ActiveSupport::Logger.new(STDOUT)
    end
  end

  def disable_logging
    Rails.logger = Logger.new("/dev/null")
  end

  def valid_event?
    Event.exists?(name: params[:event])
  end
end
票数 0
EN

Stack Overflow用户

发布于 2020-01-23 11:24:44

您可以制作一个中间件,它将过滤请求:

代码语言:javascript
复制
class FilterEventsMiddleware
  def initialize(app)
    @app = app
  end

  def call(env)
    if env['PATH_INFO'] =~ %r{\A/your/events/endpoint_path}
      # event name extraction may be different depending on how they are passed
      request = ActionDispatch::Request.new env
      event_name = request.params[:event]

      return [200, {"Content-Type" => "text/plain"}, ['']] unless Event.exists?(name: event_name)
    end
    @call.call(env)
  end
end

config.middleware.insert_before Rails::Rack::Logger, FilterEventsMiddleware

这样就没有理由禁用整个应用程序的日志记录,不相关的事件根本不会击中控制器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59876169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档