class EventLoggerRails::EventLogger

Outputs event and related data logs.

Constants

DEFAULT_EVENTS

Attributes

last_updated[R]
logger_levels[R]
registered_events[R]

Public Class Methods

new() click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 19
def initialize
  @logger_levels = logger_levels_from_config
  @registered_events = registered_events_from_config
  @last_updated = File.ctime(config_file)
end

Public Instance Methods

log(*tags, **params) click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 25
def log(*tags, **params)
  reload_config if config_changed?

  level, event = *tags
  validate_tags(level, event)
  logger = ActiveSupport::TaggedLogging.new(Logger.new(output_device))
  logger.tagged("#{level.to_s.upcase} | #{DateTime.current} | #{event}") { logger.send(level, **params.as_json) }
end

Private Instance Methods

config_changed?() click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 60
def config_changed?
  return false unless Rails.env.development?

  last_updated != File.ctime(config_file)
end
config_file() click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 50
def config_file
  Rails.root.join('config/event_logger_rails.yml')
end
data_from_config() click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 46
def data_from_config
  YAML.safe_load(File.read(config_file)).deep_symbolize_keys
end
default_event?(event) click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 87
def default_event?(event)
  DEFAULT_EVENTS.include?(event)
end
event_registered?(event) click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 82
def event_registered?(event)
  parsed_event = event.split('.').map(&:to_sym)
  registered_events.dig(*parsed_event)
end
logger_levels_from_config() click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 38
def logger_levels_from_config
  data_from_config[:logger_levels].map(&:to_sym)
end
output_device() click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 91
def output_device
  return $stdout unless Rails.env.test?

  File.open(File::NULL, 'w')
end
registered_events_from_config() click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 42
def registered_events_from_config
  data_from_config[:registered_events]
end
reload_config() click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 54
def reload_config
  @logger_levels = logger_levels_from_config
  @registered_events = registered_events_from_config
  @last_updated = File.ctime(config_file)
end
validate_event(event) click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 76
def validate_event(event)
  return true if event_registered?(event) || default_event?(event)

  raise EventLoggerRails::Exceptions::UnregisteredEvent.new(unregistered_event: event)
end
validate_logger_level(level) click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 70
def validate_logger_level(level)
  return true if logger_levels.include?(level)

  raise EventLoggerRails::Exceptions::InvalidLoggerLevel.new(logger_level: level)
end
validate_tags(level, event) click to toggle source
# File lib/event_logger_rails/event_logger.rb, line 66
def validate_tags(level, event)
  validate_logger_level(level) && validate_event(event)
end