class Nav::Logger::Middleware::RequestLogger
Public Class Methods
new(app)
click to toggle source
# File lib/nav/logger/middleware/request_logger.rb, line 6 def initialize(app) @app = app end
Public Instance Methods
call(env)
click to toggle source
# File lib/nav/logger/middleware/request_logger.rb, line 10 def call(env) start_time = Time.now status, headers, body = @app.call env [status, headers, [body]] ensure log_request start_time, env, status, headers end
Private Instance Methods
extract_content_length(headers)
click to toggle source
# File lib/nav/logger/middleware/request_logger.rb, line 44 def extract_content_length(headers) return "-" if headers.nil? value = headers[Rack::CONTENT_LENGTH] or return "-" value.to_s == "0" ? "-" : value end
log_request(start_time, env, status, headers)
click to toggle source
# File lib/nav/logger/middleware/request_logger.rb, line 19 def log_request(start_time, env, status, headers) rack_log_hash = { remote_addr: env["HTTP_X_FORWARDED_FOR"] || env["REMOTE_ADDR"] || "-", remote_user: env["REMOTE_USER"] || "-", request_method: env[Rack::REQUEST_METHOD], request_path: env[Rack::PATH_INFO], query_string: env[Rack::QUERY_STRING].empty? ? "" : "?#{env[Rack::QUERY_STRING]}", status: status.to_s[0..3], content_length: extract_content_length(headers), duration: Time.now - start_time, level: status_level(status) } tag = Nav.logger.log_tag "http" Nav.logger.post tag, rack_log_hash end
status_level(status)
click to toggle source
# File lib/nav/logger/middleware/request_logger.rb, line 35 def status_level(status) return "ERROR" if status.nil? case status.to_i when 400..499 then "WARN" when 500..599 then "ERROR" else "INFO" end end