class Nexaas::Auditor::AuditLogger

Constants

VALID_LEVELS

Attributes

logger[RW]

Public Class Methods

new(logger=nil) click to toggle source
# File lib/nexaas/auditor/audit_logger.rb, line 9
def initialize(logger=nil)
  @logger = logger
end

Public Instance Methods

log(options={}) click to toggle source
# File lib/nexaas/auditor/audit_logger.rb, line 17
def log(options={})
  level = options.delete(:level)
  raise ArgumentError, "required key `:level` not found" if level.nil?
  raise ArgumentError, "key `:level` is invalid: '#{level}'" unless VALID_LEVELS.include?(level.to_s)
  check_message!(options)
  safe_call { logger.send(level, to_message(options)) }
end

Private Instance Methods

check_message!(options) click to toggle source
# File lib/nexaas/auditor/audit_logger.rb, line 44
def check_message!(options)
  measure = options[:measure] || options['measure']
  raise ArgumentError, "required key 'measure' not found or empty" if measure.to_s == ''
end
safe_call() { |block| ... } click to toggle source
# File lib/nexaas/auditor/audit_logger.rb, line 36
def safe_call(&block)
  begin
    yield(block)
  rescue => exception
    logger.fatal("role=audit_logger class=#{self.class} measure=errors.unable_to_log exception=#{exception.class}")
  end
end
to_message(options) click to toggle source
# File lib/nexaas/auditor/audit_logger.rb, line 27
def to_message(options)
  # TODO move this logic to a dedicated class and add more tests
  options.inject(['audit_log=true']) do |array, (key,value)|
    value = value.respond_to?(:iso8601) ? value.iso8601 : value
    array << "#{key}=#{value.to_s.strip.gsub(/\s/, '-')}"
    array
  end.join(' ')
end