Class: Fluent::TraceAccumulator
- Inherits:
-
Object
- Object
- Fluent::TraceAccumulator
- Defined in:
- lib/fluent/plugin/exception_detector.rb
Overview
Buffers and groups log records if they contain exception stack traces.
Instance Attribute Summary collapse
-
#buffer_start_time ⇒ Object
readonly
Returns the value of attribute buffer_start_time.
Instance Method Summary collapse
- #flush ⇒ Object
- #force_flush ⇒ Object
-
#initialize(message_field, languages, **options, &emit_callback) ⇒ TraceAccumulator
constructor
If message_field is nil, the instance is set up to accumulate records that are plain strings (i.e. the whole record is concatenated).
- #push(time_sec, record) ⇒ Object
Constructor Details
#initialize(message_field, languages, **options, &emit_callback) ⇒ TraceAccumulator
If message_field is nil, the instance is set up to accumulate records that are plain strings (i.e. the whole record is concatenated). Otherwise, the instance accepts records that are dictionaries (usually originating from structured JSON logs) and accumulates just the content of the given message field. message_field may contain the empty string. In this case, the TraceAccumulator ‘learns’ the field name from the first record by checking for some pre-defined common field names of text logs. The option parameter can be used to pass the following parameters: force_line_breaks adds line breaks when combining exception stacks max_lines and max_bytes limit the maximum amount of data to be buffered. The default value 0 indicates ‘no limit’.
264 265 266 267 268 269 270 271 272 273 274 275 276 |
# File 'lib/fluent/plugin/exception_detector.rb', line 264 def initialize(, languages, **, &emit_callback) @exception_detector = Fluent::ExceptionDetector.new(*languages) = @force_line_breaks = [:force_line_breaks] || false @max_lines = [:max_lines] || 0 @max_bytes = [:max_bytes] || 0 @emit = emit_callback = [] @buffer_start_time = Time.now @buffer_size = 0 @first_record = nil = nil end |
Instance Attribute Details
#buffer_start_time ⇒ Object (readonly)
Returns the value of attribute buffer_start_time.
250 251 252 |
# File 'lib/fluent/plugin/exception_detector.rb', line 250 def buffer_start_time @buffer_start_time end |
Instance Method Details
#flush ⇒ Object
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 |
# File 'lib/fluent/plugin/exception_detector.rb', line 294 def flush case .length when 0 return when 1 @emit.call(, @first_record) else = .join if .nil? output_record = else output_record = @first_record output_record[] = end @emit.call(, output_record) end = [] @first_record = nil = nil @buffer_size = 0 end |
#force_flush ⇒ Object
316 317 318 319 |
# File 'lib/fluent/plugin/exception_detector.rb', line 316 def force_flush flush @exception_detector.reset end |
#push(time_sec, record) ⇒ Object
278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 |
# File 'lib/fluent/plugin/exception_detector.rb', line 278 def push(time_sec, record) = (record) if .nil? @exception_detector.reset detection_status = :no_trace else force_flush if @max_bytes.positive? && @buffer_size + .length > @max_bytes detection_status = @exception_detector.update() end update_buffer(detection_status, time_sec, record, ) force_flush if @max_lines.positive? && .length == @max_lines end |