diff --git a/lib/grape_logging.rb b/lib/grape_logging.rb index 90137cb..2beabab 100644 --- a/lib/grape_logging.rb +++ b/lib/grape_logging.rb @@ -2,11 +2,13 @@ require 'grape_logging/multi_io' require 'grape_logging/version' require 'grape_logging/formatters/default' require 'grape_logging/formatters/json' +require 'grape_logging/formatters/logstash' require 'grape_logging/loggers/base' require 'grape_logging/loggers/response' require 'grape_logging/loggers/filter_parameters' require 'grape_logging/loggers/client_env' require 'grape_logging/loggers/request_headers' +require 'grape_logging/loggers/logstash' require 'grape_logging/reporters/active_support_reporter' require 'grape_logging/reporters/logger_reporter' require 'grape_logging/timings' diff --git a/lib/grape_logging/formatters/logstash.rb b/lib/grape_logging/formatters/logstash.rb new file mode 100644 index 0000000..a906b10 --- /dev/null +++ b/lib/grape_logging/formatters/logstash.rb @@ -0,0 +1,35 @@ +module GrapeLogging + module Formatters + class Logstash + def call(severity, datetime, _, data) + { + :'@timestamp' => datetime.iso8601, + :'@version' => '1', + :severity => severity + }.merge!(format(data)).to_json + end + + private + + def format(data) + if data.is_a?(Hash) + data + elsif data.is_a?(String) + { message: data } + elsif data.is_a?(Exception) + format_exception(data) + else + { message: data.inspect } + end + end + + def format_exception(exception) + { + exception: { + message: exception.message + } + } + end + end + end +end diff --git a/lib/grape_logging/middleware/request_logger.rb b/lib/grape_logging/middleware/request_logger.rb index f6cd65a..fbaebaf 100644 --- a/lib/grape_logging/middleware/request_logger.rb +++ b/lib/grape_logging/middleware/request_logger.rb @@ -58,7 +58,8 @@ module GrapeLogging }, method: request.request_method, path: request.path, - params: request.params + params: request.params, + host: request.host } end