根据错误级别将 OmniAuth 记录器配置为两个不同的记录器

问题描述

在我的 Rails 5 应用程序中,我有 'omniauth','~> 2.0.3',在我的配置 config/initializers/omniauth.rb 中,我将记录器附加到 Rails.logger

OmniAuth.config.logger = Rails.logger

我想要做的是如果日志级别是 error 我想使用 Rollbar 而不是 Rails 记录器。

有没有办法做到这一点?

解决方法

您可以创建一个代理记录器,将error级别的日志委托给Rollbar,其他级别将委托给Rails.logger

class ProxyLogger
  delegate :error,to: :@error_logger
  delegate_missing_to :@default_logger

  def initialize(error_logger:,default_logger: Rails.logger)
    @default_logger = default_logger
    @error_logger = error_logger
  end
end

OmniAuth.config.logger = ProxyLogger.new(error_logger: Rollbar)