Class: Madvertise::Logging::ImprovedLogger
- Inherits:
-
ImprovedIO
- Object
- IO
- ImprovedIO
- Madvertise::Logging::ImprovedLogger
- Defined in:
- lib/madvertise/logging/improved_logger.rb,
lib/madvertise/logging/airbrake.rb
Overview
ImprovedLogger is an enhanced version of DaemonKits AbstractLogger class with token support, buffer backend and more.
Defined Under Namespace
Classes: Formatter
Class Attribute Summary collapse
-
.severities ⇒ Object
readonly
Hash of Symbol/Fixnum pairs to map Logger levels.
-
.silencer ⇒ Object
Enable/disable the silencer on a global basis.
Instance Attribute Summary collapse
-
#log_caller ⇒ Object
Log the file/line where the message came from.
-
#logfile ⇒ Object
readonly
Log filename for file backend.
-
#progname ⇒ Object
Program name prefix.
-
#token ⇒ Object
Arbitrary token to prefix log messages with.
Instance Method Summary collapse
- #add(severity, message, attribs = {}) ⇒ Object
-
#buffer ⇒ String
Retrieve the current buffer in case this instance is a buffered logger.
-
#close ⇒ Object
Close any connections/descriptors that may have been opened by the current backend.
-
#exception_with_airbrake(exc, message = nil, attribs = {}) ⇒ Object
(also: #exception)
Log an exception with airbrake.
- #exception_without_airbrake ⇒ Object
-
#initialize(backend = STDERR, progname = nil) ⇒ ImprovedLogger
constructor
A new instance of ImprovedLogger.
-
#level ⇒ Symbol
Get the current logging level.
-
#level=(level) ⇒ Fixnum
Set the logging level.
-
#logger ⇒ Logger
Get the backend logger.
-
#logger=(value) ⇒ Logger
Set a different backend.
-
#messages ⇒ Array
Retrieve collected messages in case this instance is a document logger.
-
#realtime(severity, msg, attribs = {}, &block) ⇒ Object
Log a realtime benchmark.
-
#restore_token(obj) ⇒ Object
Restore the token that has been associated with obj#object_id.
-
#save_token(obj) ⇒ Object
Save the current token and associate it with obj#object_id.
-
#silence(temporary_level = :error) ⇒ Object
Silence the logger for the duration of the block.
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.
59 60 61 62 63 |
# File 'lib/madvertise/logging/improved_logger.rb', line 59 def initialize(backend = STDERR, progname = nil) self.progname = progname || File.basename($0) self.logger = backend self.log_caller = false end |
Class Attribute Details
.severities ⇒ Object (readonly)
Hash of Symbol/Fixnum pairs to map Logger levels.
52 53 54 |
# File 'lib/madvertise/logging/improved_logger.rb', line 52 def severities @severities end |
.silencer ⇒ Object
Enable/disable the silencer on a global basis. Useful for debugging otherwise silenced code blocks.
56 57 58 |
# File 'lib/madvertise/logging/improved_logger.rb', line 56 def silencer @silencer end |
Instance Attribute Details
#log_caller ⇒ Object
Log the file/line where the message came from
34 35 36 |
# File 'lib/madvertise/logging/improved_logger.rb', line 34 def log_caller @log_caller end |
#logfile ⇒ Object (readonly)
Log filename for file backend.
37 38 39 |
# File 'lib/madvertise/logging/improved_logger.rb', line 37 def logfile @logfile end |
#progname ⇒ Object
Program name prefix. Used as ident for syslog backends.
28 29 30 |
# File 'lib/madvertise/logging/improved_logger.rb', line 28 def progname @progname end |
#token ⇒ Object
Arbitrary token to prefix log messages with.
31 32 33 |
# File 'lib/madvertise/logging/improved_logger.rb', line 31 def token @token end |
Instance Method Details
#add(severity, message, attribs = {}) ⇒ Object
180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/madvertise/logging/improved_logger.rb', line 180 def add(severity, , attribs = {}) severity = severity.is_a?(Symbol) ? severity : self.class.severities.key(severity) attribs.merge!(called_from) if @log_caller attribs.merge!(token: @token) if @token attribs = attribs.map do |k,v| "#{k}=#{v.to_s.clean_quote}" end.join(' ') = "#{} #{attribs}" if attribs.length > 0 logger.send(severity) { } return nil end |
#buffer ⇒ String
Retrieve the current buffer in case this instance is a buffered logger.
94 95 96 |
# File 'lib/madvertise/logging/improved_logger.rb', line 94 def buffer @logfile.string if @backend == :buffer end |
#close ⇒ Object
Close any connections/descriptors that may have been opened by the current backend.
86 87 88 89 |
# File 'lib/madvertise/logging/improved_logger.rb', line 86 def close @logger.close rescue nil @logger = nil end |
#exception_with_airbrake(exc, message = nil, attribs = {}) ⇒ Object Also known as: exception
Log an exception with airbrake.
10 11 12 13 14 15 |
# File 'lib/madvertise/logging/airbrake.rb', line 10 def exception_with_airbrake(exc, = nil, attribs = {}) Airbrake.notify_or_ignore(exc, { :error_message => , :cgi_data => ENV.to_hash, }.merge(attribs)) end |
#exception_without_airbrake ⇒ Object
17 |
# File 'lib/madvertise/logging/airbrake.rb', line 17 alias_method :exception_without_airbrake, :exception |
#level ⇒ Symbol
Get the current logging level.
108 109 110 |
# File 'lib/madvertise/logging/improved_logger.rb', line 108 def level logger.level end |
#level=(level) ⇒ Fixnum
Set the logging level.
116 117 118 119 120 |
# File 'lib/madvertise/logging/improved_logger.rb', line 116 def level=(level) logger.level = level.is_a?(Symbol) ? self.class.severities[level] : level configure_log4j(logger) define_level_methods end |
#logger ⇒ Logger
Get the backend logger.
68 69 70 |
# File 'lib/madvertise/logging/improved_logger.rb', line 68 def logger @logger ||= create_backend end |
#logger=(value) ⇒ Logger
Set a different backend.
78 79 80 81 82 |
# File 'lib/madvertise/logging/improved_logger.rb', line 78 def logger=(value) @backend = value @logger = create_backend define_level_methods end |
#messages ⇒ Array
Retrieve collected messages in case this instance is a document logger.
101 102 103 |
# File 'lib/madvertise/logging/improved_logger.rb', line 101 def logger. if @backend == :document end |
#realtime(severity, msg, attribs = {}, &block) ⇒ Object
Log a realtime benchmark
173 174 175 176 177 178 |
# File 'lib/madvertise/logging/improved_logger.rb', line 173 def realtime(severity, msg, attribs = {}, &block) result = nil rt = Benchmark.realtime { result = yield } add(severity, msg, attribs.merge({rt: rt})) return result end |
#restore_token(obj) ⇒ Object
Restore the token that has been associated with obj#object_id.
204 205 206 207 |
# File 'lib/madvertise/logging/improved_logger.rb', line 204 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.
196 197 198 199 200 201 |
# File 'lib/madvertise/logging/improved_logger.rb', line 196 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.
210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/madvertise/logging/improved_logger.rb', line 210 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 |