lib/semlogr/formatters/text_formatter.rb
# 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