class CefLogger

Attributes

facility[RW]
filtered_keys[RW]
product[RW]
program[RW]
vendor[RW]
version[RW]

Public Class Methods

compile(data) click to toggle source
# File lib/cef_logger.rb, line 46
def compile(data)
  case data
  when Hash
    data
      .reject { |key,| filtered_keys.to_a.map(&:to_s).include?(key.to_s) }
      .map { |key, value| "#{key}=#{escape_value(value)}" }
      .join(' ')
  else
    raise "Can't compile non-hashes as extensions for CEF logging!"
  end
end
escape_header(value) click to toggle source
# File lib/cef_logger.rb, line 31
def escape_header(value)
  value
    .to_s
    .gsub('|', '\\|')
end
escape_value(value) click to toggle source
# File lib/cef_logger.rb, line 37
def escape_value(value)
  value
    .to_s
    .gsub('\\', '\\\\\\')
    .gsub('=', '\\=')
    .gsub("\n", '\n')
    .gsub("\r", '\r')
end
log(name: '', severity: 6, data: {}) click to toggle source
# File lib/cef_logger.rb, line 10
def log(name: '', severity: 6, data: {})
  id =
    SecureRandom.uuid

  extension =
    compile data

  line = [
    'CEF:0',
    vendor,
    product,
    version,
    id,
    escape_header(name),
    severity,
    extension
  ].join('|')

  logger.info line
end
logger() click to toggle source
# File lib/cef_logger.rb, line 58
def logger
  @logger ||= Syslog::Logger.new program, facility
end