class Rack::Timeout::StateChangeLoggingObserver

Constants

SIMPLE_FORMATTER
STATE_LOG_LEVEL

Attributes

logger[W]

Public Class Methods

mk_logger(device, level = ::Logger::INFO) click to toggle source
# File lib/rack/timeout/logging-observer.rb, line 21
def self.mk_logger(device, level = ::Logger::INFO)
  ::Logger.new(device).tap do |logger|
    logger.level     = level
    logger.formatter = SIMPLE_FORMATTER
  end
end
new() click to toggle source
# File lib/rack/timeout/logging-observer.rb, line 11
def initialize
  @logger = nil
end

Public Instance Methods

callback() click to toggle source

returns the Proc to be used as the observer callback block

# File lib/rack/timeout/logging-observer.rb, line 16
def callback
  method(:log_state_change)
end

Private Instance Methods

log_state_change(env) click to toggle source

generates the actual log string

# File lib/rack/timeout/logging-observer.rb, line 42
def log_state_change(env)
  info = env[::Rack::Timeout::ENV_INFO_KEY]
  level = STATE_LOG_LEVEL[info.state]
  logger(env).send(level) do
    s  = +"source=rack-timeout"
    s << " id="      << info.id           if info.id
    s << " wait="    << info.ms(:wait)    if info.wait
    s << " timeout=" << info.ms(:timeout) if info.timeout
    s << " service=" << info.ms(:service) if info.service
    s << " term_on_timeout=" << info.term.to_s if info.term
    s << " state="   << info.state.to_s   if info.state
    s
  end
end
logger(env = nil) click to toggle source
# File lib/rack/timeout/logging-observer.rb, line 33
def logger(env = nil)
  @logger ||
    (defined?(::Rails) && ::Rails.respond_to?(:logger) && ::Rails.logger) ||
    (env && !env["rack.logger"].is_a?(::Rack::NullLogger) && env["rack.logger"]) ||
    (env && env["rack.errors"] && self.class.mk_logger(env["rack.errors"]))      ||
    (@fallback_logger ||= self.class.mk_logger($stderr))
end