class OpenCensus::Trace::Exporters::Logger

The Logger exporter exports captured spans to a standard Ruby Logger interface.

Public Class Methods

new(logger, level: ::Logger::INFO) click to toggle source

Create a new Logger exporter

@param [#log] logger The logger to write to. @param [Integer] level The log level. This should be a log level

defined by the Logger standard library. Default is
`::Logger::INFO`.
# File lib/opencensus/trace/exporters/logger.rb, line 35
def initialize logger, level: ::Logger::INFO
  @logger = logger
  @level = level
end

Public Instance Methods

export(spans) click to toggle source

Export the captured spans to the configured logger.

@param [Array<Span>] spans The captured spans.

# File lib/opencensus/trace/exporters/logger.rb, line 45
def export spans
  @logger.log @level, spans.map { |span| format_span(span) }.to_json
  nil
end

Private Instance Methods

format_annotation(annotation) click to toggle source
# File lib/opencensus/trace/exporters/logger.rb, line 92
def format_annotation annotation
  {
    description: format_value(annotation.description),
    attributes: format_attributes(annotation.attributes),
    dropped_attributes_count: annotation.dropped_attributes_count,
    time: annotation.time
  }
end
format_attributes(attrs) click to toggle source
# File lib/opencensus/trace/exporters/logger.rb, line 130
def format_attributes attrs
  result = {}
  attrs.each do |k, v|
    result[k] = format_value v
  end
  result
end
format_message_event(message_event) click to toggle source
# File lib/opencensus/trace/exporters/logger.rb, line 101
def format_message_event message_event
  {
    type: message_event.type,
    id: message_event.id,
    uncompressed_size: message_event.uncompressed_size,
    compressed_size: message_event.compressed_size,
    time: message_event.time
  }
end
format_span(span) click to toggle source

rubocop:disable Metrics/MethodLength rubocop:disable Metrics/AbcSize

# File lib/opencensus/trace/exporters/logger.rb, line 55
def format_span span
  {
    name: format_value(span.name),
    kind: span.kind,
    trace_id: span.trace_id,
    span_id: span.span_id,
    parent_span_id: span.parent_span_id,
    start_time: span.start_time,
    end_time: span.end_time,
    attributes: format_attributes(span.attributes),
    dropped_attributes_count: span.dropped_attributes_count,
    stack_trace: span.stack_trace,
    dropped_frames_count: span.dropped_frames_count,
    stack_trace_hash_id: span.stack_trace_hash_id,
    time_events: span.time_events.map { |te| format_time_event(te) },
    dropped_annotations_count: span.dropped_annotations_count,
    dropped_message_events_count: span.dropped_message_events_count,
    links: span.links.map { |link| format_link(link) },
    dropped_links_count: span.dropped_links_count,
    status: format_status(span.status),
    same_process_as_parent_span: span.same_process_as_parent_span,
    child_span_count: span.child_span_count
  }
end
format_status(status) click to toggle source
# File lib/opencensus/trace/exporters/logger.rb, line 121
def format_status status
  return nil if status.nil?

  {
    code: status.code,
    message: status.message
  }
end
format_time_event(time_event) click to toggle source

rubocop:enable Metrics/MethodLength rubocop:enable Metrics/AbcSize

# File lib/opencensus/trace/exporters/logger.rb, line 83
def format_time_event time_event
  case time_event
  when Annotation
    format_annotation time_event
  when MessageEvent
    format_message_event time_event
  end
end
format_value(value) click to toggle source
# File lib/opencensus/trace/exporters/logger.rb, line 138
def format_value value
  case value
  when String, Integer, true, false
    value
  when TruncatableString
    if value.truncated_byte_count.zero?
      value.value
    else
      {
        value: value.value,
        truncated_byte_count: value.truncated_byte_count
      }
    end
  else
    nil
  end
end