Sha256: e527d0ec5b512f0f17aa43029a0c673155da1c5900b79f6d8fad6e44b3959fff

Contents?: true

Size: 1 KB

Versions: 6

Compression:

Stored size: 1 KB

Contents

require "rack/body_proxy"

module Refile
  # @api private
  class CustomLogger
    LOG_FORMAT = %(%s: [%s] %s "%s%s" %d %0.1fms\n)

    def initialize(app, prefix, logger_proc)
      @app, @prefix, @logger_proc = app, prefix, logger_proc
    end

    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

    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

    def logger
      @logger ||= @logger_proc.call
      @logger || fallback_logger
    end

    def fallback_logger
      @fallback_logger ||= Logger.new(nil)
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
refile-0.5.5 lib/refile/custom_logger.rb
refile-0.5.4 lib/refile/custom_logger.rb
refile-0.5.3 lib/refile/custom_logger.rb
refile-0.5.2 lib/refile/custom_logger.rb
refile-0.5.1 lib/refile/custom_logger.rb
refile-0.5.0 lib/refile/custom_logger.rb