class Logged::Rack::Logger

Handle tagged logging much like Rails::Rack::Logger

Public Class Methods

new(app) click to toggle source
# File lib/logged/rack/logger.rb, line 10
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/logged/rack/logger.rb, line 14
def call(env)
  Thread.current[:logged_request_env] = env

  request = ActionDispatch::Request.new(env)

  if !loggers.empty?
    loggers_tagged(loggers, request) { @app.call(env) }
  else
    @app.call(env)
  end
ensure
  Thread.current[:logged_request_env] = nil
end

Private Instance Methods

compute_tags(tags, request) click to toggle source
# File lib/logged/rack/logger.rb, line 64
def compute_tags(tags, request)
  tags.map do |tag|
    case tag
    when Proc
      tag.call(request)
    when Symbol
      request.send(tag)
    else
      tag
    end
  end
end
dummy_tagged() { || ... } click to toggle source
# File lib/logged/rack/logger.rb, line 53
def dummy_tagged
  yield
end
loggers() click to toggle source
# File lib/logged/rack/logger.rb, line 30
def loggers
  @loggers ||= Logged.components.map { |c| Logged.logger_by_component(c) }.compact.uniq
end
loggers_tagged(loggers, request) { || ... } click to toggle source
# File lib/logged/rack/logger.rb, line 34
def loggers_tagged(loggers, request, &block)
  logger = loggers.shift
  tags   = tags_for_component(logger.component, request)

  if !loggers.empty?
    tagged_block(logger, tags) { loggers_tagged(loggers, request, &block) }
  else
    tagged_block(logger, tags) { yield }
  end
end
tagged_block(logger, tags, &block) click to toggle source
# File lib/logged/rack/logger.rb, line 45
def tagged_block(logger, tags, &block)
  if logger.respond_to?(:tagged)
    logger.tagged(*tags, &block)
  else
    dummy_tagged(&block)
  end
end
tags_for_component(component, request) click to toggle source
# File lib/logged/rack/logger.rb, line 57
def tags_for_component(component, request)
  tags  = Logged.config.tags || []
  tags += Logged.config[component].tags || []

  compute_tags(tags, request)
end