Module: LogjamAgent
- Extended by:
- RequestHandling, SelectiveLogging
- Defined in:
- lib/logjam_agent/sinatra.rb,
lib/logjam_agent/util.rb,
lib/logjam_agent/railtie.rb,
lib/logjam_agent/request.rb,
lib/logjam_agent/sinatra.rb,
lib/logjam_agent/version.rb,
lib/logjam_agent/receiver.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/request_handling.rb,
lib/logjam_agent/selective_logging.rb,
lib/logjam_agent/logging_attributes.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
Overview
Patch Sinatra’s render logic to compute corrected view times.
Defined Under Namespace
Modules: ActionDispatch, ComputeRenderTimes, Forwarders, LoggingAttributes, Rack, RequestHandling, SelectiveLogging, Sinatra, Util
Classes: BufferedLogger, CallerTimeoutExceeded, ConsoleFormatter, ForwardingError, ForwardingWarning, Middleware, NegativeWaitTime, Railtie, Receiver, Request, SyslogLikeFormatter, ZMQForwarder
Constant Summary
collapse
- VERSION =
"0.37.1"
- NO_COMPRESSION =
0
- ZLIB_COMPRESSION =
1
- SNAPPY_COMPRESSION =
2
- LZ4_COMPRESSION =
3
Class Method Summary
collapse
finish_request, request, request=, start_request
logdevice_only, logdevice_only?, logjam_log_selector, logjam_log_selector=, logjam_only, logjam_only?
Class Method Details
.add_forwarder(type, *args) ⇒ Object
282
283
284
285
286
287
288
|
# File 'lib/logjam_agent.rb', line 282
def self.add_forwarder(type, *args)
case type
when :zmq then Forwarders.add(ZMQForwarder.new(*args))
when :amqp then ArgumentError.new("logjam amqp transport no longer supported")
else raise ArgumentError.new("unkown logjam transport: '#{type}'")
end
end
|
.auto_detect_exception(exception_class) ⇒ Object
185
186
187
188
189
190
|
# File 'lib/logjam_agent.rb', line 185
def self.auto_detect_exception(exception_class)
if (class_name = exception_class.to_s) =~ /^[\w:]+$/
exception_classes << class_name unless exception_classes.include?(class_name)
end
end
|
.auto_detect_logged_exceptions ⇒ Object
203
204
205
206
207
208
209
210
211
212
213
|
# File 'lib/logjam_agent.rb', line 203
def self.auto_detect_logged_exceptions
return if @_exception_auto_detection_initialized
determine_loaded_exception_classes
Exception.class_eval " def self.inherited(subclass)\n ::LogjamAgent.auto_detect_exception(subclass)\n ::LogjamAgent.reset_exception_matcher\n end\n EOS\n @_exception_auto_detection_initialized = true\nend\n"
|
.compression_method=(compression_method) ⇒ Object
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
# File 'lib/logjam_agent.rb', line 106
def self.compression_method=(compression_method)
case compression_method
when SNAPPY_COMPRESSION
begin
require "snappy"
@@compression_method = SNAPPY_COMPRESSION
rescue LoadError
end
when LZ4_COMPRESSION
begin
require "ruby-lz4"
@@compression_method = LZ4_COMPRESSION
rescue LoadError
end
when NO_COMPRESSION, ZLIB_COMPRESSION
@@compression_method = compression_method
else
raise ArgumentError.new("unknown compression method")
end
end
|
.cookie_obfuscator ⇒ Object
88
89
90
91
92
93
94
95
|
# File 'lib/logjam_agent.rb', line 88
def self.cookie_obfuscator
@cookie_obfuscator ||=
if defined?(ActiveSupport::ParameterFilter)
ActiveSupport::ParameterFilter.new(obfuscated_cookies)
else
ActionDispatch::Http::ParameterFilter.new(obfuscated_cookies)
end
end
|
.decode_payload(data) ⇒ Object
256
257
258
259
260
261
262
263
264
265
266
267
268
269
|
# File 'lib/logjam_agent.rb', line 256
def self.decode_payload(data)
case compression_method
when SNAPPY_COMPRESSION
Snappy.inflate(data)
when LZ4_COMPRESSION
uncompressed_size = data[0..3].unpack("N")
buf = String.new("", capacity: uncompressed_size)
LZ4::Raw.decompress(data[4..-1], uncompressed_size, dest: buf).first
when ZLIB_COMPRESSION
ActiveSupport::Gzip.decompress(data)
else
data
end
end
|
.determine_loaded_exception_classes ⇒ Object
196
197
198
199
200
201
|
# File 'lib/logjam_agent.rb', line 196
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
63
64
65
|
# File 'lib/logjam_agent.rb', line 63
def self.disable!
self.disabled = true
end
|
.enable! ⇒ Object
67
68
69
|
# File 'lib/logjam_agent.rb', line 67
def self.enable!
self.disabled = false
end
|
.encode_payload(data) ⇒ Object
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
|
# File 'lib/logjam_agent.rb', line 239
def self.encode_payload(data)
json = json_encode_payload(data)
case compression_method
when SNAPPY_COMPRESSION
Snappy.deflate(json)
when LZ4_COMPRESSION
n = data.byte_size
max_compressed_size = n + n/256 + 16
buf = String.new([n].pack("N"), capacity: max_compressed_size + 4)
LZ4::Raw.compress(json, input_size: n, dest: buf, max_ouput_size: max_compressed_size).first
when ZLIB_COMPRESSION
ActiveSupport::Gzip.compress(json)
else
json
end
end
|
.event(label, extra_fields = {}) ⇒ Object
271
272
273
274
275
276
277
278
279
280
|
# File 'lib/logjam_agent.rb', line 271
def self.event(label, = {})
fields = {
:label => label,
:started_at => Time.now.iso8601,
:host => hostname,
:uuid => generate_uuid
}
fields.merge!()
forwarder.forward(fields, :routing_key => events_routing_key, :sync => true)
end
|
.get_hostname ⇒ Object
54
55
56
57
58
|
# File 'lib/logjam_agent.rb', line 54
def self.get_hostname
name = Socket.gethostname
host = name.split('.').first
Addrinfo.getaddrinfo(host, nil, nil, :STREAM, nil, Socket::AI_CANONNAME).first.canonname rescue name
end
|
.ip_obfuscator(ip) ⇒ Object
81
82
83
|
# File 'lib/logjam_agent.rb', line 81
def self.ip_obfuscator(ip)
obfuscate_ips ? ip.to_s.sub(/\d+\z/, 'XXX') : ip
end
|
.log_to_log_device?(severity, msg) ⇒ Boolean
174
175
176
177
178
179
180
181
182
183
|
# File 'lib/logjam_agent.rb', line 174
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
154
155
156
157
158
159
160
|
# File 'lib/logjam_agent.rb', line 154
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_matcher ⇒ Object
192
193
194
|
# File 'lib/logjam_agent.rb', line 192
def self.reset_exception_matcher
self.exception_matcher = Regexp.new(self.exception_classes.map{|e| Regexp.escape(e)}.join("|"))
end
|