lib/semlogr/events/log_event.rb
# frozen_string_literal: true
require 'digest/xxhash'
require 'semlogr/templates/parser'
module Semlogr
module Events
class LogEvent
attr_reader :severity
attr_reader :template
attr_reader :error
attr_reader :properties
attr_reader :timestamp
def initialize(severity, template, error: nil, **properties)
@timestamp = Time.now.utc
@severity = severity
@template = template
@error = error
@properties = properties
end
def self.create(severity, template, properties)
template = Templates::Parser.parse(template)
LogEvent.new(severity, template, properties)
end
def get_property(name)
@properties[name]
end
def add_property(properties)
@properties.merge!(properties)
end
def add_property_if_absent(properties)
@properties.merge!(properties) { |_, old, _| old }
end
def render(output)
@template.render(output, @properties)
end
def type
@type ||= Digest::XXH32.hexdigest(@template.text)
end
def to_s
output = +''
render(output)
output
end
end
end
end