Class: Merb::Logger

Inherits:
Object show all
Defined in:
lib/merb-core/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/merb-core/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/merb-core/logger.rb', line 44

def auto_flush
  @auto_flush
end

#bufferObject (readonly)

Returns the value of attribute buffer.



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

def buffer
  @buffer
end

#delimiterObject

Returns the value of attribute delimiter.



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

def delimiter
  @delimiter
end

#init_argsObject (readonly)

Returns the value of attribute init_args.



47
48
49
# File 'lib/merb-core/logger.rb', line 47

def init_args
  @init_args
end

#levelObject

Returns the value of attribute level.



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

def level
  @level
end

#logObject (readonly)

Returns the value of attribute log.



46
47
48
# File 'lib/merb-core/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

The message to be logged. Defaults to nil.

Returns

String

The resulting message added to the log file.



148
149
150
151
152
153
154
155
156
157
# File 'lib/merb-core/logger.rb', line 148

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.



134
135
136
137
138
# File 'lib/merb-core/logger.rb', line 134

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

#flushObject

Flush the entire buffer to the log object.



128
129
130
131
# File 'lib/merb-core/logger.rb', line 128

def flush
  return unless @buffer.size > 0
  @log.write(@buffer.slice!(0..-1).to_s)
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

Delimiter to use between message sections. Defaults to " ~ ".

auto_flush

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
122
123
124
125
# File 'lib/merb-core/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]
  elsif Merb.environment == "production"
    @level = Levels[:warn]
  else
    @level = Levels[:debug]
  end
  @buffer     = []
  @delimiter  = delimiter
  @auto_flush = auto_flush

  initialize_log(log)

  Merb.logger = self
end