Class: LogjamAgent::BufferedLogger

Inherits:
Object
  • Object
show all
Includes:
RequestHandling
Defined in:
lib/logjam_agent/buffered_logger.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from RequestHandling

#finish_request, #request, #request=, #start_request

Constructor Details

#initialize(*args) ⇒ BufferedLogger

Returns a new instance of BufferedLogger.



58
59
60
61
62
63
# File 'lib/logjam_agent/buffered_logger.rb', line 58

def initialize(*args)
  super(*args)
  # stupid bug in the buffered logger code (Rails::VERSION::STRING < "3.2")
  @log.write "\n" if @log && respond_to?(:buffer)
  @formatter = lambda{|_, _, _, message| message}
end

Instance Attribute Details

#formatterObject

Returns the value of attribute formatter.



53
54
55
# File 'lib/logjam_agent/buffered_logger.rb', line 53

def formatter
  @formatter
end

Instance Method Details

#add(severity, message = nil, progname = nil, tags_text = nil, &block) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/logjam_agent/buffered_logger.rb', line 65

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) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
# File 'lib/logjam_agent/buffered_logger.rb', line 98

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