Class: Madvertise::Logging::ImprovedLogger

Inherits:
ImprovedIO
  • Object
show all
Includes:
IOCompat
Defined in:
lib/madvertise/logging/improved_logger.rb

Overview

ImprovedLogger is an enhanced version of DaemonKits AbstractLogger class with token support, buffer backend and more.

Defined Under Namespace

Modules: IOCompat Classes: Formatter

Class Attribute Summary collapse

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from IOCompat

#_raise_write_only, #close_read, #close_write, #closed?, #sync, #sync=

Methods inherited from ImprovedIO

#external_encoding, #flush, #internal_encoding, #print, #printf, #putc, #puts, #readbyte, #readchar, #readline, #set_encoding, #tty?

Constructor Details

#initialize(backend = STDERR, progname = nil) ⇒ ImprovedLogger

Returns a new instance of ImprovedLogger.



41
42
43
44
# File 'lib/madvertise/logging/improved_logger.rb', line 41

def initialize(backend = STDERR, progname = nil)
  self.progname = progname || File.basename($0)
  self.logger = backend
end

Class Attribute Details

.severitiesObject (readonly)

Hash of Symbol/Fixnum pairs to map Logger levels.



34
35
36
# File 'lib/madvertise/logging/improved_logger.rb', line 34

def severities
  @severities
end

.silencerObject

Enable/disable the silencer on a global basis. Useful for debugging otherwise silenced code blocks.



38
39
40
# File 'lib/madvertise/logging/improved_logger.rb', line 38

def silencer
  @silencer
end

Instance Attribute Details

#prognameObject

Program name prefix. Used as ident for syslog backends.



16
17
18
# File 'lib/madvertise/logging/improved_logger.rb', line 16

def progname
  @progname
end

#tokenObject

Arbitrary token to prefix log messages with.



19
20
21
# File 'lib/madvertise/logging/improved_logger.rb', line 19

def token
  @token
end

Instance Method Details

#<<(msg) ⇒ Object Also known as: write

Log an info level message



125
126
127
# File 'lib/madvertise/logging/improved_logger.rb', line 125

def <<(msg)
  add(:info, msg)
end

#bufferString

Retrieve the current buffer in case this instance is a buffered logger.

Returns:

  • (String)

    Contents of the buffer.



74
75
76
# File 'lib/madvertise/logging/improved_logger.rb', line 74

def buffer
  @logfile.string if @backend == :buffer
end

#closeObject

Close any connections/descriptors that may have been opened by the current backend.



66
67
68
69
# File 'lib/madvertise/logging/improved_logger.rb', line 66

def close
  @logger.close rescue nil
  @logger = nil
end

#debug(msg) ⇒ Object

Log a debug level message.



95
96
97
# File 'lib/madvertise/logging/improved_logger.rb', line 95

def debug(msg)
  add(:debug, msg)
end

#error(msg) ⇒ Object

Log an error level message.



110
111
112
# File 'lib/madvertise/logging/improved_logger.rb', line 110

def error(msg)
  add(:error, msg)
end

#exception(exc) ⇒ Object

Log an exception with fatal level.

Parameters:

  • exc (Exception, String)

    The exception to log. If exc is a String no backtrace will be generated.



135
136
137
138
# File 'lib/madvertise/logging/improved_logger.rb', line 135

def exception(exc)
  exc = "EXCEPTION: #{exc.message}: #{clean_trace(exc.backtrace)}" if exc.is_a?(::Exception)
  add(:fatal, exc, true)
end

#fatal(msg) ⇒ Object

Log a fatal level message.



115
116
117
# File 'lib/madvertise/logging/improved_logger.rb', line 115

def fatal(msg)
  add(:fatal, msg)
end

#info(msg) ⇒ Object

Log an info level message.



100
101
102
# File 'lib/madvertise/logging/improved_logger.rb', line 100

def info(msg)
  add(:info, msg)
end

#levelSymbol

Get the current logging level.

Returns:

  • (Symbol)

    Current logging level.



81
82
83
# File 'lib/madvertise/logging/improved_logger.rb', line 81

def level
  self.class.severities.invert[@logger.level]
end

#level=(level) ⇒ Fixnum

Set the logging level.

Parameters:

  • level (Symbol, Fixnum)

    New level as Symbol or Fixnum from Logger class.

Returns:

  • (Fixnum)

    New level converted to Fixnum from Logger class.



89
90
91
92
# File 'lib/madvertise/logging/improved_logger.rb', line 89

def level=(level)
  level = level.is_a?(Symbol) ? self.class.severities[level] : level
  logger.level = level
end

#loggerLogger

Get the backend logger.

Returns:

  • (Logger)

    The currently active backend logger object.



49
50
51
# File 'lib/madvertise/logging/improved_logger.rb', line 49

def logger
  @logger ||= create_backend
end

#logger=(value) ⇒ Logger

Set a different backend.

Parameters:

  • value (Symbol, String, IO, Logger)

    The new logger backend. Either a Logger object, an IO object, a String containing the logfile path or a Symbol to create a default backend for :syslog or :buffer

Returns:

  • (Logger)

    The newly created backend logger object.



59
60
61
62
# File 'lib/madvertise/logging/improved_logger.rb', line 59

def logger=(value)
  @backend = value
  create_backend
end

#restore_token(obj) ⇒ Object

Restore the token that has been associated with obj#object_id.



149
150
151
152
# File 'lib/madvertise/logging/improved_logger.rb', line 149

def restore_token(obj)
  @tokens ||= {}
  @token = @tokens.delete(obj.object_id)
end

#save_token(obj) ⇒ Object

Save the current token and associate it with obj#object_id.



141
142
143
144
145
146
# File 'lib/madvertise/logging/improved_logger.rb', line 141

def save_token(obj)
  if @token
    @tokens ||= {}
    @tokens[obj.object_id] = @token
  end
end

#silence(temporary_level = :error) ⇒ Object

Silence the logger for the duration of the block.



155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/madvertise/logging/improved_logger.rb', line 155

def silence(temporary_level = :error)
  if self.class.silencer
    begin
      old_level, self.level = self.level, temporary_level
      yield self
    ensure
      self.level = old_level
    end
  else
    yield self
  end
end

#unknown(msg) ⇒ Object

Log a message with unknown level.



120
121
122
# File 'lib/madvertise/logging/improved_logger.rb', line 120

def unknown(msg)
  add(:unknown, msg)
end

#warn(msg) ⇒ Object

Log a warning level message.



105
106
107
# File 'lib/madvertise/logging/improved_logger.rb', line 105

def warn(msg)
  add(:warn, msg)
end