class LogjamAgent::BufferedLogger

Attributes

formatter[RW]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/logjam_agent/buffered_logger.rb, line 35
def initialize(*args)
  super(*args)
  @formatter = lambda{|_, _, _, message| message}
end

Public Instance Methods

add(severity, message = nil, progname = nil, tags_text = nil, &block) click to toggle source
# File lib/logjam_agent/buffered_logger.rb, line 40
def add(severity, message = nil, progname = nil, tags_text = nil, &block)
  return if level > severity
  message = progname if message.nil?
  progname = nil
  message ||= block.call || '' if block
  request = LogjamAgent.request
  if message.is_a?(Exception)
    request.add_exception(message.class.to_s, severity) if request
    message = format_exception(message)
  else
    message = message.to_s
    if request && severity >= Logger::ERROR && (e = detect_logged_exception(message))
      request.add_exception(e)
    end
  end
  log_to_log_device = LogjamAgent.log_to_log_device?(severity, message)
  message = "#{tags_text}#{message}" unless tags_text.blank?
  time = Time.now
  if log_to_log_device
    formatted_message = formatter.call(severity, time, progname, message)
    if respond_to?(:buffer)
      buffer <<  formatted_message << "\n"
      auto_flush
    elsif @log # @log is a logger (or nil for rails 4)
      @log << "#{formatted_message}\n"
    elsif @logdev
      @logdev.write(formatted_message)
    end
  end
  request.add_line(severity, time, message) if request
  message
end
logdev=(log_device) click to toggle source
# File lib/logjam_agent/buffered_logger.rb, line 73
def logdev=(log_device)
  raise "cannot connect logger to new log device" unless log_device.respond_to?(:write)
  if respond_to?(:buffer)
    @log = log_device
  else
    (@log||self).instance_eval do
      raise "cannot set log device" unless defined?(@logdev)
      @logdev = log_device
    end
  end
end

Private Instance Methods

detect_logged_exception(message) click to toggle source
# File lib/logjam_agent/buffered_logger.rb, line 87
def detect_logged_exception(message)
  (matcher = LogjamAgent.exception_matcher) && message[matcher]
end
format_exception(exception) click to toggle source
# File lib/logjam_agent/buffered_logger.rb, line 91
def format_exception(exception)
  msg = "#{exception.class}(#{exception.message})"
  if backtrace = exception.backtrace
    backtrace = Rails.backtrace_cleaner.clean(backtrace, :all) if defined?(Rails)
    msg << ":\n  #{backtrace.join("\n  ")}"
  else
    msg
  end
end