class Hanami::Web::RackLogger
Rack logger for Hanami
apps
@api private @since 2.0.0
Constants
- CONTENT_LENGTH
- EMPTY_PARAMS
- HTTP_X_FORWARDED_FOR
- MICROSECOND
- MILLISECOND
- PATH_INFO
- REMOTE_ADDR
- REQUEST_METHOD
- ROUTER_PARAMS
- SCRIPT_NAME
Attributes
logger[R]
Public Class Methods
new(logger, env: :development)
click to toggle source
@api private @since 2.0.0
# File lib/hanami/web/rack_logger.rb, line 126 def initialize(logger, env: :development) @logger = UniversalLogger[logger] extend(Development) if %i[development test].include?(env) end
Public Instance Methods
attach(rack_monitor)
click to toggle source
@api private @since 2.0.0
# File lib/hanami/web/rack_logger.rb, line 133 def attach(rack_monitor) rack_monitor.on :stop do |event| log_request event[:env], event[:status], event[:time] end rack_monitor.on :error do |event| # TODO: why we don't provide time on error? log_exception event[:env], event[:exception], 500, 0 end end
log_exception(env, exception, status, elapsed)
click to toggle source
@api private @since 2.0.0
# File lib/hanami/web/rack_logger.rb, line 154 def log_exception(env, exception, status, elapsed) logger.tagged(:rack) do logger.error(exception, **data(env, status: status, elapsed: elapsed)) end end
log_request(env, status, elapsed)
click to toggle source
@api private @since 2.0.0
# File lib/hanami/web/rack_logger.rb, line 146 def log_request(env, status, elapsed) logger.tagged(:rack) do logger.info(**data(env, status: status, elapsed: elapsed)) end end
Private Instance Methods
data(env, status:, elapsed:)
click to toggle source
@api private @since 2.0.0
# File lib/hanami/web/rack_logger.rb, line 166 def data(env, status:, elapsed:) { verb: env[REQUEST_METHOD], status: status, ip: env[HTTP_X_FORWARDED_FOR] || env[REMOTE_ADDR], path: "#{env[SCRIPT_NAME]}#{env[PATH_INFO]}", length: extract_content_length(env), params: env.fetch(ROUTER_PARAMS, EMPTY_PARAMS), elapsed: elapsed, elapsed_unit: MICROSECOND, } end
extract_content_length(env)
click to toggle source
@api private @since 2.0.0
# File lib/hanami/web/rack_logger.rb, line 181 def extract_content_length(env) value = env[CONTENT_LENGTH] !value || value.to_s == "0" ? "-" : value end