semlogr/semlogr

View on GitHub
lib/semlogr/formatters/text_formatter.rb

Summary

Maintainability
A
25 mins
Test Coverage
# frozen_string_literal: true

require 'semlogr/templates/parser'
require 'semlogr/properties/output_properties'
require 'semlogr/templates/property_token'

module Semlogr
  module Formatters
    class TextFormatter
      DEFAULT_TEMPLATE = "[{timestamp}] {severity}: {message}\n{error}"

      def initialize(template: DEFAULT_TEMPLATE)
        @template = Templates::Parser.parse(template)
      end

      def format(log_event)
        output = +''
        output_properties = Properties::OutputProperties.create(log_event)

        @template.tokens.each do |token|
          case token
          when Templates::PropertyToken
            if token.property_name == :message
              log_event.render(output)
            elsif output_properties[token.property_name]
              token.render(output, output_properties)
            end
          else
            token.render(output, output_properties)
          end
        end

        output
      end
    end
  end
end