class Twiglet::Formatter

Public Class Methods

new(service_name, validator:, default_properties: {}, now: -> { Time.now.utc } click to toggle source
Calls superclass method
# File lib/twiglet/formatter.rb, line 9
def initialize(service_name,
               validator:, default_properties: {},
               now: -> { Time.now.utc })
  @service_name = service_name
  @now = now
  @default_properties = default_properties
  @validator = validator

  super()
end

Public Instance Methods

call(severity, _time, _progname, msg) click to toggle source
# File lib/twiglet/formatter.rb, line 20
def call(severity, _time, _progname, msg)
  level = severity.downcase
  message = Message.new(msg)
  @validator.validate(message)
  log(level: level, message: message)
end

Private Instance Methods

log(level:, message:) click to toggle source
# File lib/twiglet/formatter.rb, line 29
def log(level:, message:)
  base_message = {
    ecs: {
      version: '1.5.0'
    },
    "@timestamp": @now.call.iso8601(3),
    service: {
      name: @service_name
    },
    log: {
      level: level
    }
  }

  base_message
    .deep_merge(@default_properties.to_nested)
    .deep_merge(message.to_nested)
    .to_json
    .concat("\n")
end