class RackSilence::Logger

Impose silence on the app’s logger

Public Class Methods

new(app, opts = {}) click to toggle source

@param app Rack app @param logger set logger to control. Make it lazy in a ‘proc`

Defaults to a lazy `Rails.logger`

@param header check header ‘X-SILENCE-LOGGER` before silencing

Can be true, false, or `:token`

@param silenced array of criterias to silence

Can be `String` or `Regexp` to match a path, or `Token` objects
# File lib/rack_silence.rb, line 25
def initialize(app, opts = {})
  @app = app
  @opts = opts
  @opts[:silenced] ||= []
  @opts[:logger]   ||= -> { Rails.logger }
  @opts[:level]    ||= ::Logger::ERROR
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack_silence.rb, line 33
def call(env)
  return @app.call(env) unless silence?(env)

  silence_new_relic
  silence(logger) { @app.call(env) }
end

Protected Instance Methods

header_silence?(env) click to toggle source
# File lib/rack_silence.rb, line 63
def header_silence?(env)
  return unless @opts.key?(:header)

  if @opts[:header] == :token
    return @opts[:silenced].reduce(false) do |acc, rule|
      acc || rule.is_a?(Token) && rule == env['HTTP_X_SILENCE_LOGGER']
    end
  end

  env.key?('HTTP_X_SILENCE_LOGGER') if @opts[:header]
end
logger() click to toggle source
# File lib/rack_silence.rb, line 55
def logger
  @opts[:logger].respond_to?(:call) ? @opts[:logger].call : @opts[:logger]
end
path_silence?(env) click to toggle source
# File lib/rack_silence.rb, line 75
def path_silence?(env)
  @opts[:silenced].reduce(false) do |acc, rule|
    acc || case rule
           when String then rule == env['PATH_INFO']
           when Regexp then rule.match(env['PATH_INFO'])
           else false
           end
  end
end
silence(logger, temporary_level = @opts[:level]) { || ... } click to toggle source
# File lib/rack_silence.rb, line 48
def silence(logger, temporary_level = @opts[:level])
  previous_level, logger.level = logger.level, temporary_level
  yield
ensure
  logger.level = previous_level
end
silence?(env) click to toggle source
# File lib/rack_silence.rb, line 59
def silence?(env)
  header_silence?(env) || path_silence?(env)
end
silence_new_relic() click to toggle source
# File lib/rack_silence.rb, line 42
def silence_new_relic
  NewRelic::Agent.ignore_transaction
rescue NameError
  nil
end