Sha256: 6321da7c048cf1bb82d99719263fbbc137412c6ecb9672ca54f63dcbf448ac55

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

module Semlogr
  module Sinks
    module Seq
      class ClefFormatter
        def initialize(opts = {})
          default_opts = {
            mode: :custom,
            time_format: :ruby,
            use_to_json: true
          }

          @opts = default_opts.merge(opts)
        end

        def format(log_event)
          event = {
            '@t' => log_event.timestamp.iso8601(3),
            '@l' => log_event.severity.to_s,
            '@mt' => log_event.template.text
          }

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

          event_json = Oj.dump(event, @opts)
          "#{event_json}\n"
        end

        private

        def add_error(event, error)
          return unless error
          event['@x'] = "#{error[:type]}: #{error[:message]}"

          return unless error[:backtrace] && error[:backtrace].any?
          event['@x'] += "\n\s\s#{error[:backtrace].join("\n\s\s")}"
        end

        def add_properties(event, properties)
          event.merge!(properties) { |_, old, _| old }
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
semlogr-sinks-seq-0.1.1 lib/semlogr/sinks/seq/clef_formatter.rb