Class: DataMapper::Logger

Inherits:
Object
  • Object
show all
Defined in:
lib/dm-core/support/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.



92
93
94
95
96
97
# File 'lib/dm-core/support/logger.rb', line 92

def initialize(*args)
  @init_args = args
  set_log(*args)
  self.auto_flush = true
  DataMapper.logger = self
end

Instance Attribute Details

#auto_flushObject

Returns the value of attribute auto_flush.



43
44
45
# File 'lib/dm-core/support/logger.rb', line 43

def auto_flush
  @auto_flush
end

#bufferObject (readonly)

Returns the value of attribute buffer.



44
45
46
# File 'lib/dm-core/support/logger.rb', line 44

def buffer
  @buffer
end

#delimiterObject

Returns the value of attribute delimiter.



42
43
44
# File 'lib/dm-core/support/logger.rb', line 42

def delimiter
  @delimiter
end

#init_argsObject (readonly)

Returns the value of attribute init_args.



46
47
48
# File 'lib/dm-core/support/logger.rb', line 46

def init_args
  @init_args
end

#levelObject

Returns the value of attribute level.



41
42
43
# File 'lib/dm-core/support/logger.rb', line 41

def level
  @level
end

#logObject (readonly)

Returns the value of attribute log.



45
46
47
# File 'lib/dm-core/support/logger.rb', line 45

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.



145
146
147
148
149
150
151
152
153
154
# File 'lib/dm-core/support/logger.rb', line 145

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.



131
132
133
134
135
# File 'lib/dm-core/support/logger.rb', line 131

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

#flushObject

Flush the entire buffer to the log object.



125
126
127
128
# File 'lib/dm-core/support/logger.rb', line 125

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.



111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/dm-core/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