Module: LogjamAgent

Extended by:
RequestHandling
Defined in:
lib/logjam_agent.rb,
lib/logjam_agent/util.rb,
lib/logjam_agent/railtie.rb,
lib/logjam_agent/request.rb,
lib/logjam_agent/version.rb,
lib/logjam_agent/forwarders.rb,
lib/logjam_agent/middleware.rb,
lib/logjam_agent/rack/logger.rb,
lib/logjam_agent/zmq_forwarder.rb,
lib/logjam_agent/amqp_forwarder.rb,
lib/logjam_agent/syslog_like_formatter.rb,
lib/logjam_agent/actionpack/lib/action_dispatch/middleware/remote_ip.rb,
lib/logjam_agent/buffered_logger.rb,
lib/logjam_agent.rb

Defined Under Namespace

Modules: ActionDispatch, Forwarders, Rack, RequestHandling, Util Classes: AMQPForwarder, BufferedLogger, CallerTimeoutExceeded, ConsoleFormatter, ForwardingError, ForwardingWarning, Middleware, NegativeWaitTime, Railtie, Request, SyslogLikeFormatter, ZMQForwarder

Constant Summary collapse

VERSION =
"0.26.6"
NO_COMPRESSION =
0
ZLIB_COMPRESSION =
1
SNAPPY_COMPRESSION =
2

Class Method Summary collapse

Methods included from RequestHandling

finish_request, request, request=, start_request

Class Method Details

.add_forwarder(type, *args) ⇒ Object



269
270
271
272
273
274
275
# File 'lib/logjam_agent.rb', line 269

def self.add_forwarder(type, *args)
  case type
  when :zmq then Forwarders.add(ZMQForwarder.new(*args))
  when :amqp then Forwarders.add(AMQPForwarder.new(*args))
  else raise ArgumentError.new("unkown logjam transport: '#{type}'")
  end
end

.auto_detect_exception(exception_class) ⇒ Object



192
193
194
195
196
197
# File 'lib/logjam_agent.rb', line 192

def self.auto_detect_exception(exception_class)
  # ignore Exception classes created with Class.new (timeout.rb, my old friend)
  if (class_name = exception_class.to_s) =~ /^[\w:]+$/
    exception_classes << class_name unless exception_classes.include?(class_name)
  end
end

.auto_detect_logged_exceptionsObject



210
211
212
213
214
215
216
217
218
219
220
# File 'lib/logjam_agent.rb', line 210

def self.auto_detect_logged_exceptions
  return if @_exception_auto_detection_initialized
  determine_loaded_exception_classes
  Exception.class_eval <<-"EOS"
    def self.inherited(subclass)
      ::LogjamAgent.auto_detect_exception(subclass)
      ::LogjamAgent.reset_exception_matcher
    end
  EOS
  @_exception_auto_detection_initialized = true
end

.compression_method=(compression_method) ⇒ Object



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/logjam_agent.rb', line 123

def self.compression_method=(compression_method)
  case compression_method
  when SNAPPY_COMPRESSION
    begin
      require "snappy"
      @@compression_method = SNAPPY_COMPRESSION
    rescue LoadError
      # do nothing
    end
  when NO_COMPRESSION, ZLIB_COMPRESSION
    @@compression_method = compression_method
  else
    raise ArgumentError.new("unknown compression method")
  end
end


112
113
114
# File 'lib/logjam_agent.rb', line 112

def self.cookie_obfuscator
  @cookie_obfuscator ||= ActionDispatch::Http::ParameterFilter.new(obfuscated_cookies)
end

.determine_loaded_exception_classesObject



203
204
205
206
207
208
# File 'lib/logjam_agent.rb', line 203

def self.determine_loaded_exception_classes
  ObjectSpace.each_object(Class) do |klass|
    auto_detect_exception(klass) if klass != Exception && klass.ancestors.include?(Exception)
  end
  reset_exception_matcher
end

.disable!Object



90
91
92
# File 'lib/logjam_agent.rb', line 90

def self.disable!
  self.disabled = true
end

.enable!Object



94
95
96
# File 'lib/logjam_agent.rb', line 94

def self.enable!
  self.disabled = false
end

.encode_payload(data) ⇒ Object



246
247
248
249
250
251
252
253
254
255
256
# File 'lib/logjam_agent.rb', line 246

def self.encode_payload(data)
  json = json_encode_payload(data)
  case compression_method
  when ZLIB_COMPRESSION
    ActiveSupport::Gzip.compress(json)
  when SNAPPY_COMPRESSION
    Snappy.deflate(json)
  else
    json
  end
end

.event(label, extra_fields = {}) ⇒ Object



258
259
260
261
262
263
264
265
266
267
# File 'lib/logjam_agent.rb', line 258

def self.event(label, extra_fields = {})
  fields = {
    :label      => label,
    :started_at => Time.now.iso8601,
    :host       => hostname,
    :uuid       => generate_uuid
  }
  fields.merge!(extra_fields)
  forwarder.forward(fields, :routing_key => events_routing_key, :sync => true)
end

.get_hostnameObject



78
79
80
81
82
83
84
85
# File 'lib/logjam_agent.rb', line 78

def self.get_hostname
  n = Socket.gethostname
  if n.split('.').size > 1
    n
  else
    Socket.gethostbyname(n).first rescue n
  end
end

.ip_obfuscator(ip) ⇒ Object

TODO: ipv6 obfuscation



105
106
107
# File 'lib/logjam_agent.rb', line 105

def self.ip_obfuscator(ip)
  obfuscate_ips ? ip.to_s.sub(/\d+\z/, 'XXX') : ip
end

.log_to_log_device?(severity, msg) ⇒ Boolean

Returns:

  • (Boolean)


181
182
183
184
185
186
187
188
189
190
# File 'lib/logjam_agent.rb', line 181

def self.log_to_log_device?(severity, msg)
  return false if severity < log_device_log_level
  if override_global_ignore_lines?
    msg !~ request.log_device_ignored_lines
  else
    !(log_device_ignored_lines && msg =~ log_device_ignored_lines)
  end
rescue
  true
end

.max_logged_size_for(key) ⇒ Object



161
162
163
164
165
166
167
# File 'lib/logjam_agent.rb', line 161

def self.max_logged_size_for(key)
  if key == 'HTTP_COOKIE'.freeze
    max_logged_cookie_size
  else
    max_logged_param_size
  end
end

.reset_exception_matcherObject



199
200
201
# File 'lib/logjam_agent.rb', line 199

def self.reset_exception_matcher
  self.exception_matcher = Regexp.new(self.exception_classes.map{|e| Regexp.escape(e)}.join("|"))
end