Sha256: 82d3f650dcfc06fa0b9d5b617bf1a92cbdd6cff87a52430709a054cb211b7a74

Contents?: true

Size: 855 Bytes

Versions: 2

Compression:

Stored size: 855 Bytes

Contents

require 'json'

module Semlogr
  module Formatters
    class JsonFormatter
      def format(log_event)
        event = {
          timestamp: log_event.timestamp.iso8601(3),
          severity: log_event.severity,
          message: log_event.to_s
        }

        add_error(event, log_event.error)
        add_properties(event, log_event.properties)

        yield(event) if block_given?

        "#{event.to_json}\n"
      end

      private

      def add_error(event, error)
        return unless error

        backtrace = error.backtrace || []
        event[:error] = {
          type: error.class,
          message: error.message,
          backtrace: backtrace.join("\n")
        }
      end

      def add_properties(event, properties)
        return unless properties.any?

        event[:properties] = properties
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
semlogr-0.1.1 lib/semlogr/formatters/json_formatter.rb
semlogr-0.1.0 lib/semlogr/formatters/json_formatter.rb