Class: Merb::Logger

Inherits:
Extlib::Logger
  • Object
show all
Defined in:
lib/merb-core/logger.rb,
lib/merb-core/logger.rb

Overview

Merb::Logger = Extlib::Logger

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

Mash.new({
  :fatal => 7,
  :error => 6,
  :warn  => 4,
  :info  => 3,
  :debug => 0
})
@@mutex =
{}

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.



102
103
104
# File 'lib/merb-core/logger.rb', line 102

def initialize(*args)
  set_log(*args)
end

Instance Attribute Details

#auto_flushObject

Returns the value of attribute auto_flush.



52
53
54
# File 'lib/merb-core/logger.rb', line 52

def auto_flush
  @auto_flush
end

#bufferObject (readonly)

Returns the value of attribute buffer.



53
54
55
# File 'lib/merb-core/logger.rb', line 53

def buffer
  @buffer
end

#delimiterObject

Returns the value of attribute delimiter.



51
52
53
# File 'lib/merb-core/logger.rb', line 51

def delimiter
  @delimiter
end

#init_argsObject (readonly)

Returns the value of attribute init_args.



55
56
57
# File 'lib/merb-core/logger.rb', line 55

def init_args
  @init_args
end

#levelObject

Returns the value of attribute level.



50
51
52
# File 'lib/merb-core/logger.rb', line 50

def level
  @level
end

#logObject (readonly)

Returns the value of attribute log.



54
55
56
# File 'lib/merb-core/logger.rb', line 54

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.



160
161
162
163
164
165
166
167
168
169
# File 'lib/merb-core/logger.rb', line 160

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.



146
147
148
149
150
# File 'lib/merb-core/logger.rb', line 146

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

#flushObject

Flush the entire buffer to the log object.



138
139
140
141
142
143
# File 'lib/merb-core/logger.rb', line 138

def flush
  return unless @buffer.size > 0
  @mutex.synchronize do
    @log.write(@buffer.slice!(0..-1).to_s)
  end
end

#set_log(stream = Merb::Config[:log_stream], log_level = Merb::Config[:log_level], delimiter = Merb::Config[:log_delimiter], auto_flush = Merb::Config[:log_auto_flush]) ⇒ 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.



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/merb-core/logger.rb', line 118

def set_log(stream = Merb::Config[:log_stream],
  log_level = Merb::Config[:log_level],
  delimiter = Merb::Config[:log_delimiter],
  auto_flush = Merb::Config[:log_auto_flush])

  @buffer                   = []
  @delimiter                = delimiter
  @auto_flush               = auto_flush

  if Levels[log_level]
    @level                  = Levels[log_level]
  else
    @level                  = log_level
  end

  @log                      = stream
  @mutex = (@@mutex[@log] ||= Mutex.new)
end

#verbose(message, level = :warn) ⇒ Object



8
9
10
# File 'lib/merb-core/logger.rb', line 8

def verbose(message, level = :warn)
  send(level, message) if Merb::Config[:verbose]
end

#verbose!(message, level = :warn) ⇒ Object



4
5
6
# File 'lib/merb-core/logger.rb', line 4

def verbose!(message, level = :warn)
  send("#{level}!", message) if Merb::Config[:verbose]
end