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, max_lines: 0, max_bytes: 0, &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, max_lines: 0, max_bytes: 0, &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 named parameters max_lines and max_bytes limit the maximum amount of data to be buffered. The default value 0 indicates ‘no limit’.
216 217 218 219 220 221 222 223 224 225 226 227 228 |
# File 'lib/fluent/plugin/exception_detector.rb', line 216 def initialize(, languages, max_lines: 0, max_bytes: 0, &emit_callback) @exception_detector = Fluent::ExceptionDetector.new(*languages) @max_lines = max_lines @max_bytes = max_bytes @message_field = @messages = [] @buffer_start_time = Time.now @buffer_size = 0 @first_record = nil @first_timestamp = nil @emit = emit_callback end |
Instance Attribute Details
#buffer_start_time ⇒ Object (readonly)
Returns the value of attribute buffer_start_time.
204 205 206 |
# File 'lib/fluent/plugin/exception_detector.rb', line 204 def buffer_start_time @buffer_start_time end |
Instance Method Details
#flush ⇒ Object
245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 |
# File 'lib/fluent/plugin/exception_detector.rb', line 245 def flush case @messages.length when 0 return when 1 @emit.call(@first_timestamp, @first_record) else = @messages.join if @message_field.nil? output_record = else output_record = @first_record output_record[@message_field] = end @emit.call(@first_timestamp, output_record) end @messages = [] @first_record = nil @first_timestamp = nil @buffer_size = 0 end |
#force_flush ⇒ Object
267 268 269 270 |
# File 'lib/fluent/plugin/exception_detector.rb', line 267 def force_flush flush @exception_detector.reset end |
#push(time_sec, record) ⇒ Object
230 231 232 233 234 235 236 237 238 239 240 241 242 243 |
# File 'lib/fluent/plugin/exception_detector.rb', line 230 def push(time_sec, record) = (record) if .nil? @exception_detector.reset detection_status = :no_trace else force_flush if @max_bytes > 0 && @buffer_size + .length > @max_bytes detection_status = @exception_detector.update() end update_buffer(detection_status, time_sec, record, ) force_flush if @max_lines > 0 && @messages.length == @max_lines end |