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