Class: Pancake::Logger

Inherits:
Object show all
Defined in:
lib/pancake/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

Hashie::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.



68
69
70
# File 'lib/pancake/logger.rb', line 68

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

Instance Attribute Details

#auto_flushObject

Returns the value of attribute auto_flush.



40
41
42
# File 'lib/pancake/logger.rb', line 40

def auto_flush
  @auto_flush
end

#bufferObject (readonly)

Returns the value of attribute buffer.



41
42
43
# File 'lib/pancake/logger.rb', line 41

def buffer
  @buffer
end

#delimiterObject

Returns the value of attribute delimiter.



39
40
41
# File 'lib/pancake/logger.rb', line 39

def delimiter
  @delimiter
end

#init_argsObject (readonly)

Returns the value of attribute init_args.



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

def init_args
  @init_args
end

#levelObject

Returns the value of attribute level.



38
39
40
# File 'lib/pancake/logger.rb', line 38

def level
  @level
end

#logObject (readonly)

Returns the value of attribute log.



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

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.



127
128
129
130
131
132
133
134
135
136
# File 'lib/pancake/logger.rb', line 127

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.



113
114
115
116
117
# File 'lib/pancake/logger.rb', line 113

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

#flushObject

Flush the entire buffer to the log object.



105
106
107
108
109
110
# File 'lib/pancake/logger.rb', line 105

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

#set_log(stream = Pancake.configuration.log_stream, log_level = Pancake.configuration.log_level, delimiter = Pancake.configuration.log_delimiter, auto_flush = Pancake.configuration.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.



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/pancake/logger.rb', line 84

def set_log(stream = Pancake.configuration.log_stream,
  log_level  = Pancake.configuration.log_level,
  delimiter  = Pancake.configuration.log_delimiter,
  auto_flush = Pancake.configuration.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
  @log.sync                 = true
  @mutex = (@@mutex[@log] ||= Mutex.new)
end