Module: Jets::Controller::Decorate::Logging

Extended by:
ActiveSupport::Concern
Included in:
Base
Defined in:
lib/jets/controller/decorate/logging.rb

Instance Method Summary collapse

Instance Method Details

#dispatch!Object



14
15
16
17
18
19
20
21
# File 'lib/jets/controller/decorate/logging.rb', line 14

def dispatch!
  t1 = Time.now
  log_start
  triplet = super # Abstract#dispatch!
  took = Time.now - t1
  log_finish status: status, took: took
  triplet
end

#event_logObject



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/jets/controller/decorate/logging.rb', line 54

def event_log
  event = @event.dup # clone to display event

  if event['isBase64Encoded']
    event['body'] = '[BASE64_ENCODED]'
  else
    event['body'] = filter_json_log(event['body'])
  end

  event["multiValueQueryStringParameters"] = parameter_filter.filter(event['multiValueQueryStringParameters']) if event['multiValueQueryStringParameters']
  event["pathParameters"] = parameter_filter.filter(event['pathParameters']) if event['pathParameters']
  event["queryStringParameters"] = parameter_filter.filter(event['queryStringParameters']) if event['queryStringParameters']
  json_dump_log(event)
end

#filter_json_log(json_text) ⇒ Object

Append _log to reduce chance of name collision with user defined methods



70
71
72
73
74
75
76
77
78
79
80
# File 'lib/jets/controller/decorate/logging.rb', line 70

def filter_json_log(json_text)
  return json_text if json_text.blank?

  begin
    hash_params = JSON.parse(json_text)
    filtered_params = parameter_filter.filter(hash_params)
    JSON.dump(filtered_params)
  rescue JSON::ParserError
    '[FILTERED]'
  end
end

#json_dump_log(data) ⇒ Object

Handles binary data safely



83
84
85
86
87
88
# File 'lib/jets/controller/decorate/logging.rb', line 83

def json_dump_log(data)
  JSON.dump(data)
rescue Encoding::UndefinedConversionError
  data['body'] = '[BINARY]'
  JSON.dump(data)
end

#log_event?Boolean

Returns:

  • (Boolean)


43
44
45
46
# File 'lib/jets/controller/decorate/logging.rb', line 43

def log_event?
  return false if ENV['JETS_LOG_EVENT'] == '0'
  Jets.config.logging.event
end

#log_finish(options = {}) ⇒ Object

Documented interface method, careful not to rename



49
50
51
52
# File 'lib/jets/controller/decorate/logging.rb', line 49

def log_finish(options={})
  status, took = options[:status], options[:took]
  logger.info "Completed Status Code #{status} in #{"%.3f" % took}s"
end

#log_startObject

Documented interface method, careful not to rename



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/jets/controller/decorate/logging.rb', line 30

def log_start
  # Commented out Started because Jets::Rack::Logger middleware handles now
  # ip = request.ip
  # logger.info "Started (Jets) #{request.request_method} \"#{request.path}\" for #{ip} at #{Time.now}"

  logger.info processing_log
  logger.info "  Raw Event: #{@event}" if ENV['JETS_LOG_RAW_EVENT']
  logger.info "  Event: #{event_log}" if log_event?
  params = filtered_parameters.to_h.except('controller', 'action')
  # JSON.dump makes logging look pretty in CloudWatch logs because it keeps it on 1 line
  logger.info "  Parameters: #{JSON.dump(params)}" unless params.empty?
end

#processing_logObject



23
24
25
26
27
# File 'lib/jets/controller/decorate/logging.rb', line 23

def processing_log
  processing = "Processing #{self.class.name}##{@meth}"
  processing << " (original method #{@original_meth})" if @original_meth
  processing
end