Object
A logger that holds all messages in circular buffers, then flushes the buffers when an event occurs at a configurable severity threshold.
Unlike ruby's Logger, this class only supports a single progname.
Create a new IncidentLogger.
# File lib/celluloid/logging/incident_logger.rb, line 45 def initialize(progname=nil, options={}) @progname = progname || "default" @level = options[:level] || DEBUG @threshold = options[:threshold] || ERROR @sizelimit = options[:sizelimit] || 100 @buffer_mutex = Mutex.new @buffers = Hash.new do |progname_hash, _progname| @buffer_mutex.synchronize do progname_hash[_progname] = Hash.new do |severity_hash, severity| severity_hash[severity] = RingBuffer.new(@sizelimit) end end end # When the IncidentLogger itself encounters an error, it falls back to logging to stderr @fallback_logger = ::Logger.new(STDERR) @fallback_logger.progname = "FALLBACK" end
add an event.
# File lib/celluloid/logging/incident_logger.rb, line 66 def add(severity, message=nil, progname=nil, &block) progname ||= @progname severity ||= UNKNOWN if severity < @level return event.id end if message.nil? && !block_given? message = progname progname = @progname end event = LogEvent.new(severity, message, progname, &block) @buffers[progname][severity] << event if severity >= @threshold begin Celluloid::Notifications.notifier.async.publish(incident_topic, create_incident(event)) rescue => ex @fallback_logger.error(ex) end end event.id end
# File lib/celluloid/logging/incident_logger.rb, line 115 def clear @buffer_mutex.synchronize do @buffers.each { |buffer| buffer.clear } end end
# File lib/celluloid/logging/incident_logger.rb, line 121 def create_incident(event=nil) Incident.new(flush, event) end
# File lib/celluloid/logging/incident_logger.rb, line 96 def debug (progname=nil, &block); add(DEBUG, nil, progname, &block); end
# File lib/celluloid/logging/incident_logger.rb, line 99 def error (progname=nil, &block); add(ERROR, nil, progname, &block); end
# File lib/celluloid/logging/incident_logger.rb, line 100 def fatal (progname=nil, &block); add(FATAL, nil, progname, &block); end
# File lib/celluloid/logging/incident_logger.rb, line 103 def flush messages = [] @buffer_mutex.synchronize do @buffers.each do |progname, severities| severities.each do |severity, buffer| messages += buffer.flush end end end messages.sort end
# File lib/celluloid/logging/incident_logger.rb, line 125 def incident_topic "log.incident.#{@progname}" end
# File lib/celluloid/logging/incident_logger.rb, line 97 def info (progname=nil, &block); add(INFO, nil, progname, &block); end
See docs for Logger#info
# File lib/celluloid/logging/incident_logger.rb, line 95 def trace (progname=nil, &block); add(TRACE, nil, progname, &block); end
Generated with the Darkfish Rdoc Generator 2.