class Ardm::Logger

Constants

Levels

Notes

Ruby (standard) logger levels:

:fatal

An unhandleable error that results in a program crash

:error

A handleable error condition

:warn

A warning

:info

generic (useful) information about system operation

:debug

low-level information for developers

Attributes

auto_flush[RW]
buffer[R]
delimiter[RW]
init_args[R]
level[RW]
log[R]

Public Class Methods

new(*args) click to toggle source

To initialize the logger you create a new object, proxies to set_log.

Parameters

*args

Arguments to create the log from. See set_logs for specifics.

# File lib/ardm/support/logger.rb, line 92
def initialize(*args)
  @init_args = args
  set_log(*args)
  self.auto_flush = true
  Ardm.logger = self
end

Public Instance Methods

<<(string = nil) click to toggle source

Appends a message to the log. The methods yield to an optional block and the output of this block will be appended to the message.

Parameters

string<String>

The message to be logged. Defaults to nil.

Returns

String

The resulting message added to the log file.

# File lib/ardm/support/logger.rb, line 147
def <<(string = nil)
  message = ""
  message << delimiter
  message << string if string
  message << "\n" unless message[-1] == ?\n
  @buffer << message
  flush if @auto_flush

  message
end
Also aliased as: push
close() click to toggle source

Close and remove the current log object.

# File lib/ardm/support/logger.rb, line 133
def close
  flush
  @log.close if @log.respond_to?(:close) && !@log.tty?
  @log = nil
end
flush() click to toggle source

Flush the entire buffer to the log object.

# File lib/ardm/support/logger.rb, line 125
def flush
  return unless @buffer.size > 0
  to_flush = @buffer
  @buffer = []
  @log.write(to_flush.join)
end
push(string = nil)
Alias for: <<
set_log(log, log_level = nil, delimiter = " ~ ", auto_flush = false) click to toggle source

Replaces an existing logger with a new one.

Parameters

log<IO, String>

Either an IO object or a name of a logfile.

log_level<~to_sym>

The log level from, e.g. :fatal or :info. Defaults to :error in the production environment and :debug otherwise.

delimiter<String>

Delimiter to use between message sections. Defaults to “ ~ ”.

auto_flush<Boolean>

Whether the log should automatically flush after new messages are added. Defaults to false.

# File lib/ardm/support/logger.rb, line 111
def set_log(log, log_level = nil, delimiter = " ~ ", auto_flush = false)
  if log_level && Levels[log_level.to_sym]
    @level = Levels[log_level.to_sym]
  else
    @level = Levels[:debug]
  end
  @buffer     = []
  @delimiter  = delimiter
  @auto_flush = auto_flush

  initialize_log(log)
end

Private Instance Methods

initialize_log(log) click to toggle source

Readies a log for writing.

Parameters

log<IO, String>

Either an IO object or a name of a logfile.

# File lib/ardm/support/logger.rb, line 70
def initialize_log(log)
  close if @log # be sure that we don't leave open files laying around.

  if log.respond_to?(:write)
    @log = log
  elsif File.exist?(log)
    @log = open(log, (File::WRONLY | File::APPEND))
    @log.sync = true
  else
    FileUtils.mkdir_p(File.dirname(log)) unless File.directory?(File.dirname(log))
    @log = open(log, (File::WRONLY | File::APPEND | File::CREAT))
    @log.sync = true
    @log.write("#{Time.now.httpdate} #{delimiter} info #{delimiter} Logfile created\n")
  end
end