Class: Extlib::Logger

Inherits:
Object show all
Defined in:
lib/extlib/logger.rb

Constant Summary collapse

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

{
  :fatal => 7,
  :error => 6,
  :warn  => 4,
  :info  => 3,
  :debug => 0
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Logger

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.



93
94
95
96
# File 'lib/extlib/logger.rb', line 93

def initialize(*args)
  @init_args = args
  set_log(*args)
end

Instance Attribute Details

#auto_flushObject

Returns the value of attribute auto_flush.



44
45
46
# File 'lib/extlib/logger.rb', line 44

def auto_flush
  @auto_flush
end

#bufferObject (readonly)

Returns the value of attribute buffer.



45
46
47
# File 'lib/extlib/logger.rb', line 45

def buffer
  @buffer
end

#delimiterObject

Returns the value of attribute delimiter.



43
44
45
# File 'lib/extlib/logger.rb', line 43

def delimiter
  @delimiter
end

#init_argsObject (readonly)

Returns the value of attribute init_args.



47
48
49
# File 'lib/extlib/logger.rb', line 47

def init_args
  @init_args
end

#levelObject

Returns the value of attribute level.



42
43
44
# File 'lib/extlib/logger.rb', line 42

def level
  @level
end

#logObject (readonly)

Returns the value of attribute log.



46
47
48
# File 'lib/extlib/logger.rb', line 46

def log
  @log
end

Instance Method Details

#<<(string = nil) ⇒ Object Also known as: push

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.



144
145
146
147
148
149
150
151
152
153
# File 'lib/extlib/logger.rb', line 144

def <<(string = nil)
  message = ""
  message << delimiter
  message << string if string
  message << "\n" unless message[-1] == ?\n
  @buffer << message
  flush if @auto_flush

  message
end

#closeObject

Close and remove the current log object.



130
131
132
133
134
# File 'lib/extlib/logger.rb', line 130

def close
  flush
  @log.close if @log.respond_to?(:close) && !@log.tty?
  @log = nil
end

#flushObject

Flush the entire buffer to the log object.



124
125
126
127
# File 'lib/extlib/logger.rb', line 124

def flush
  return unless @buffer.size > 0
  @log.write(@buffer.slice!(0..-1).join)
end

#set_log(log, log_level = nil, delimiter = " ~ ", auto_flush = false) ⇒ Object

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.



110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/extlib/logger.rb', line 110

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