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’.
196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/fluent/plugin/exception_detector.rb', line 196 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.
184 185 186 |
# File 'lib/fluent/plugin/exception_detector.rb', line 184 def buffer_start_time @buffer_start_time end |
Instance Method Details
#flush ⇒ Object
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/fluent/plugin/exception_detector.rb', line 226 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
248 249 250 251 |
# File 'lib/fluent/plugin/exception_detector.rb', line 248 def force_flush flush @exception_detector.reset end |
#push(time_sec, record) ⇒ Object
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'lib/fluent/plugin/exception_detector.rb', line 210 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 |