Sha256: 94af9153a53590ade4617cba6face607fc9fc6aa086fd3b76ea9347b9e011981
Contents?: true
Size: 1.95 KB
Versions: 2
Compression:
Stored size: 1.95 KB
Contents
require 'logger' class Dreamcatcher::LoggerProxy attr_reader :original_logger, :log_entries def initialize(logger) @original_logger = logger @log_entries = [] end def capture(&block) register_logger_monkeypatch unless @original_logger.nil? yield if block_given? return self ensure deregister_logger_monkeypatch unless @original_logger.nil? end def self.capture(logger, &block) Dreamcatcher::LoggerProxy.new(logger).capture(&block) end protected def register_logger_monkeypatch @original_logger.instance_variable_set(:"@_captured_entries", @log_entries) class << @original_logger def add_with_capture(severity, prog, message = nil, &block) message = yield if message.nil? && block_given? @_captured_entries << LogEntry.new(severity, prog, message) add_without_capture(severity, prog, message) end alias_method :add_without_capture, :add alias_method :add, :add_with_capture end end def deregister_logger_monkeypatch class << @original_logger alias_method :add, :add_without_capture undef_method :add_without_capture undef_method :add_with_capture end @original_logger.send :remove_instance_variable, :"@_captured_entries" end class LogEntry attr_reader :severity, :message, :timestamp def initialize(severity, prog, message, timestamp = nil) @severity = severity @prog = prog @message = message @timestamp = timestamp || Time.now end def to_s(format = '%t [%s] %m') format. sub('%s', format_severity). sub('%m', @message || ''). sub('%p', @prog || ''). sub('%t', format_timestamp) end protected # Severity label for logging (max 5 chars). SEV_LABEL = %w(DEBUG INFO WARN ERROR FATAL ANY) def format_severity SEV_LABEL[severity] || 'ANY' end def format_timestamp timestamp.strftime('%F %T %Z') end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dreamcatcher-0.0.2 | lib/dreamcatcher/logger_proxy.rb |
dreamcatcher-0.0.1 | lib/dreamcatcher/logger_proxy.rb |