class BmcDaemonLib::Logger

Constants

DEFAULT_FORMAT

Public Class Methods

new(filename, rotation = nil) click to toggle source
Calls superclass method
# File lib/bmc-daemon-lib/logger.rb, line 17
def initialize filename, rotation = nil
  # Initialize
  super
  @format = DEFAULT_FORMAT

  # Import LOGGER_FORMAT if defined
  if (defined?'LOGGER_FORMAT') && (LOGGER_FORMAT.is_a? Hash)
    @format.merge! LOGGER_FORMAT
  end

  # Define formatter
  self.formatter = proc do |severity, datetime, progname, messages|
    formatter(severity, datetime, progname, messages)
  end
end

Public Instance Methods

add(severity, message, context = nil, details = nil) click to toggle source

def info message

add Logger::INFO, "INFO:#{message}"

end def debug message

add Logger::DEBUG, "DEBUG:#{message}"

end def error message

add Logger::ERROR, "ERROR:#{message}"

end

Calls superclass method
# File lib/bmc-daemon-lib/logger.rb, line 43
def add severity, message, context = nil, details = nil
  # Start from an empty messages list with the main message
  messages = []
  messages << sprintf(@format[:text], message) if message

  # Add raw lines
  if context.nil? && (details.is_a? Array)
    messages = details

  # Add details from array
  elsif details.is_a? Array
    details.each do |line|
      messages << sprintf(@format[:array], line)
    end 

  # Add details from hash
  elsif details.is_a?(Hash) || details.is_a?(Hashie::Mash)
    details.each do |key, value|
      messages << sprintf(@format[:hash], key, value)
    end 

  # Add each line of "details" after split
  elsif details.is_a? String
    details.lines.each do |line|
      messages << line unless line.empty?
    end 

  end

  # Pass all that stuff to my parent
  super severity, messages, context
end

Protected Instance Methods

formatter(severity, datetime, context, messages) click to toggle source
# File lib/bmc-daemon-lib/logger.rb, line 82
def formatter severity, datetime, context, messages
  # Build header with time and context
  header = @format[:header] % {
    time: datetime.strftime(@format[:time]),
    pid: Process.pid,
    severity: severity,
    pipe: self.progname,
    context: build_context(context)
    }

  # If we have a plain message, we're done
  return "#{header} #{trimmed(payload)}\n" unless messages.is_a?(Array)

  # If we have a bunch of lines, prefix them and send them together
  return messages.collect do |line|
    "#{header} #{trimmed(line)}\n"
  end.join
end
trimmed(line) click to toggle source
# File lib/bmc-daemon-lib/logger.rb, line 78
def trimmed line
  line.to_s.rstrip[0..@format[:trim].to_i].force_encoding(Encoding::UTF_8)
end

Private Instance Methods

build_context(context) click to toggle source

Builds prefix from @format and context

# File lib/bmc-daemon-lib/logger.rb, line 104
def build_context context
  # Skip if no format defined
  return unless @format[:context].is_a? Hash

  # Call the instance's method to get hash context
  return unless context.is_a? Hash

  # Build each context part
  return @format[:context].collect do |key, format|
    sprintf(format, context[key])
  end.join

rescue KeyError, ArgumentError => ex
  return "[context: #{ex.message}]"
end