class Pakyow::Logger::Formatters::JSON

Formats log messages as json.

@example

{"severity":"info","timestamp":"2016-06-20 10:07:30 -0500","id":"c8af6a8b","type":"http","elapsed":"0.01ms","method":"GET","path":"/","ip":"127.0.0.1"}
{"severity":"info","timestamp":"2016-06-20 10:07:30 -0500","id":"c8af6a8b","type":"http","elapsed":"1.24ms","message":"hello 2016-06-20 10:07:30 -0500"}
{"severity":"info","timestamp":"2016-06-20 10:07:30 -0500","id":"c8af6a8b","type":"http","elapsed":"3.08ms","status":200}

@api private

Private Instance Methods

format(event, **options) click to toggle source
# File lib/pakyow/logger/formatters/json.rb, line 22
def format(event, **options)
  entry = {
    "severity" => options[:severity],
    "timestamp" => Time.now
  }

  case event
  when Hash
    if event.key?("logger") && event.key?("message")
      format_logger_message(event, entry)
    else
      entry.merge!(event)
    end
  else
    entry["message"] = event.to_s
  end

  serialize(entry)
end
format_entry(entry, id:, type:, elapsed:) click to toggle source
# File lib/pakyow/logger/formatters/json.rb, line 84
def format_entry(entry, id:, type:, elapsed:)
  entry["id"] = id
  entry["type"] = type
  entry["elapsed"] = Timekeeper.format_elapsed_time_in_milliseconds(elapsed)
  entry
end
format_epilogue(connection, entry) click to toggle source
# File lib/pakyow/logger/formatters/json.rb, line 74
def format_epilogue(connection, entry)
  entry["status"] = connection.status
end
format_error(error, entry) click to toggle source
# File lib/pakyow/logger/formatters/json.rb, line 78
def format_error(error, entry)
  entry["exception"] = error.class
  entry["message"] = error.to_s
  entry["backtrace"] = error.backtrace
end
format_logger_message(logger_message, entry) click to toggle source
# File lib/pakyow/logger/formatters/json.rb, line 42
def format_logger_message(logger_message, entry)
  logger = logger_message["logger"]
  message = logger_message["message"]

  format_entry(
    entry, id: logger.id, type: logger.type, elapsed: logger.elapsed
  )

  case message
  when Hash
    if connection = message.delete("prologue")
      format_prologue(connection, entry)
    elsif connection = message.delete("epilogue")
      format_epilogue(connection, entry)
    elsif error = message.delete("error")
      format_error(error, entry)
    else
      entry.update(message)
    end
  when Exception
    format_error(message, entry)
  else
    entry["message"] = message.to_s
  end
end
format_prologue(connection, entry) click to toggle source
# File lib/pakyow/logger/formatters/json.rb, line 68
def format_prologue(connection, entry)
  entry["method"] = connection.request_method
  entry["uri"] = connection.path
  entry["ip"] = connection.ip
end
serialize(entry) click to toggle source
# File lib/pakyow/logger/formatters/json.rb, line 91
def serialize(entry)
  @output.call(entry.to_json << "\n")
end