Class: Reaxar::Middleware::Log
- Inherits:
-
MiddlewareAbstract
- Object
- MiddlewareAbstract
- Reaxar::Middleware::Log
- Defined in:
- lib/reaxar/middleware/log.rb
Overview
Middleware for logging HTTP requests and responses.
Instance Attribute Summary collapse
-
#logger ⇒ Logger
readonly
The logger used for output.
Instance Method Summary collapse
-
#initialize(logger = nil) ⇒ Log
constructor
Initializes the Log middleware.
-
#process_request(request) ⇒ Hash
Logs information about the HTTP request.чц.
-
#process_response(response, request) ⇒ Object
Logs information about the HTTP response.
Constructor Details
#initialize(logger = nil) ⇒ Log
Initializes the Log middleware.
19 20 21 22 |
# File 'lib/reaxar/middleware/log.rb', line 19 def initialize(logger = nil) super() @logger = logger || Logger.new($stdout) end |
Instance Attribute Details
#logger ⇒ Logger (readonly)
Returns The logger used for output.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/reaxar/middleware/log.rb', line 16 class Log < MiddlewareAbstract # Initializes the Log middleware. # @param logger [Logger, nil] Logger instance for output (defaults to $logger). def initialize(logger = nil) super() @logger = logger || Logger.new($stdout) end # Logs information about the HTTP request.чц # @param request [Hash] The request data. # @return [Hash] The original request. def process_request(request) @start_time = Time.now log_request_info(request, @start_time) log_request_headers(request) request end # Logs information about the HTTP response. # @param response [Object] The HTTP response. # @param request [Hash] The original request. # @return [Object] The HTTP response. def process_response(response, request) duration = Time.now - @start_time status = response.respond_to?(:status) ? response.status : '???' log_response_info(request, response, status, duration) log_response_headers(response) response end private def log_request_info(request, _start_time) @logger.info("➡️ [#{@start_time.iso8601}] #{request[:method].upcase} #{request[:uri]}") end def log_request_headers(request) return unless request[:headers] && !request[:headers].empty? @logger.info('Request headers:') request[:headers].each do |key, value| @logger.info(" #{key}: #{value}") end end def log_response_info(request, _response, status, duration) @logger.info("⬅️ [#{Time.now.iso8601}] #{request[:method].upcase} #{request[:uri]} - " \ "#{status} (#{duration.round(2)}s)") end def log_response_headers(response) return unless response.respond_to?(:headers) && response.headers && !response.headers.empty? @logger.info('Response headers:') response.headers.each do |key, value| @logger.info(" #{key}: #{value}") end end end |
Instance Method Details
#process_request(request) ⇒ Hash
Logs information about the HTTP request.чц
27 28 29 30 31 32 |
# File 'lib/reaxar/middleware/log.rb', line 27 def process_request(request) @start_time = Time.now log_request_info(request, @start_time) log_request_headers(request) request end |
#process_response(response, request) ⇒ Object
Logs information about the HTTP response.
38 39 40 41 42 43 44 |
# File 'lib/reaxar/middleware/log.rb', line 38 def process_response(response, request) duration = Time.now - @start_time status = response.respond_to?(:status) ? response.status : '???' log_response_info(request, response, status, duration) log_response_headers(response) response end |