Class: Salestation::Web::RequestLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/salestation/web/request_logger.rb

Defined Under Namespace

Classes: Logger

Constant Summary collapse

REMOTE_ADDR =
'REMOTE_ADDR'.freeze
REQUEST_URI =
'REQUEST_URI'.freeze
REQUEST_METHOD =
'REQUEST_METHOD'.freeze
QUERY_STRING =
'QUERY_STRING'.freeze
CONTENT_TYPE =
'CONTENT_TYPE'.freeze
HTTP_USER_AGENT =
'HTTP_USER_AGENT'.freeze
HTTP_ACCEPT =
'HTTP_ACCEPT'.freeze
SERVER_NAME =
'SERVER_NAME'.freeze
JSON_CONTENT_TYPE =
'application/json'.freeze

Instance Method Summary collapse

Constructor Details

#initialize(app, logger, log_response_body: true) ⇒ RequestLogger

Returns a new instance of RequestLogger.



18
19
20
21
22
# File 'lib/salestation/web/request_logger.rb', line 18

def initialize(app, logger, log_response_body: true)
  @app = app
  @logger = logger
  @log_response_body = log_response_body
end

Instance Method Details

#call(env) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/salestation/web/request_logger.rb', line 24

def call(env)
  request_id = SecureRandom.hex(4)
  request_logger = Logger.new(@logger, request_id)

  env['request_logger'] = request_logger
  began_at = Time.now

  request_logger.info('Received request', request_log(env))
  @app.call(env).tap do |status, headers, body|
    type = status >= 500 ? :error : :info
    request_logger.public_send(type, 'Processed request', response_log(env, status, headers, body, began_at))
  end
end