class Refile::CustomLogger

@api private

Constants

LOG_FORMAT

LOG_FORMAT = %(%s: [%s] %s ā€œ%s%sā€ %d %0.1fmsn)

Public Class Methods

new(app, prefix, logger_proc) click to toggle source
# File lib/refile/custom_logger.rb, line 9
def initialize(app, prefix, logger_proc)
  @app = app
  @prefix = prefix
  @logger_proc = logger_proc
end

Public Instance Methods

call(env) click to toggle source
# File lib/refile/custom_logger.rb, line 15
def call(env)
  began_at = Time.now
  status, header, body = @app.call(env)
  body = Rack::BodyProxy.new(body) { log(env, status, began_at) }
  [status, header, body]
end

Private Instance Methods

fallback_logger() click to toggle source
# File lib/refile/custom_logger.rb, line 45
def fallback_logger
  @fallback_logger ||= Logger.new(nil)
end
log(env, status, began_at) click to toggle source
# File lib/refile/custom_logger.rb, line 24
def log(env, status, began_at)
  now = Time.now
  logger.info do
    format(
      LOG_FORMAT,
      @prefix,
      now.strftime("%F %T %z"),
      env["REQUEST_METHOD"],
      env["PATH_INFO"],
      env["QUERY_STRING"].empty? ? "" : "?" + env["QUERY_STRING"],
      status.to_s[0..3],
      (now - began_at) * 1000
    )
  end
end
logger() click to toggle source
# File lib/refile/custom_logger.rb, line 40
def logger
  @logger ||= @logger_proc.call
  @logger || fallback_logger
end