class StackifyRubyAPM::Spies::YellSpy

@api private

Constants

EXCEPTION
SEVERITIES

Public Instance Methods

add(options, *messages, &block) click to toggle source

Log messages

# File lib/stackify_apm/spies/yell.rb, line 17
def add(options, *messages, &block)
  return add_without_apm(options, *messages, &block) unless StackifyRubyAPM.current_transaction

  begin
    name = 'yell;'
    type = 'ext.yell'
    log_message = []
    exception = []

    messages.each { |msg|
      case msg
      when ::String
        log_message.push(msg)
      when ::Exception
        log_message.push(msg.message)
        exception.push("(#{ msg.class })\n#{ msg.backtrace.join("\n") if msg.backtrace }")
      else
        log_message.push(msg.inspect)
      end
    }

    ctx = Span::Context.new(
      CATEGORY: 'Log',
      SUBCATEGORY: 'Yell',
      LEVEL: SEVERITIES[options.severity],
      MESSAGE: log_message.to_s,
      PREFIX: 'TRUE'
    )

    if exception.length > 0
      ctx.EXCEPTION = exception.to_s
    end
  rescue Exception => e
    StackifyRubyAPM.agent.error "[YellSpy] Error: creating span context."
    StackifyRubyAPM.agent.error "[YellSpy] #{e.inspect}"
    return add_without_apm(options, *messages, &block)
  end

  StackifyRubyAPM.span name, type, context: ctx do
    add_without_apm(options, *messages, &block)
  end
end
install() click to toggle source
# File lib/stackify_apm/spies/yell.rb, line 12
def install
  Yell::Logger.module_eval do
    alias_method 'add_without_apm', 'add'

    # Log messages
    def add(options, *messages, &block)
      return add_without_apm(options, *messages, &block) unless StackifyRubyAPM.current_transaction

      begin
        name = 'yell;'
        type = 'ext.yell'
        log_message = []
        exception = []

        messages.each { |msg|
          case msg
          when ::String
            log_message.push(msg)
          when ::Exception
            log_message.push(msg.message)
            exception.push("(#{ msg.class })\n#{ msg.backtrace.join("\n") if msg.backtrace }")
          else
            log_message.push(msg.inspect)
          end
        }

        ctx = Span::Context.new(
          CATEGORY: 'Log',
          SUBCATEGORY: 'Yell',
          LEVEL: SEVERITIES[options.severity],
          MESSAGE: log_message.to_s,
          PREFIX: 'TRUE'
        )

        if exception.length > 0
          ctx.EXCEPTION = exception.to_s
        end
      rescue Exception => e
        StackifyRubyAPM.agent.error "[YellSpy] Error: creating span context."
        StackifyRubyAPM.agent.error "[YellSpy] #{e.inspect}"
        return add_without_apm(options, *messages, &block)
      end

      StackifyRubyAPM.span name, type, context: ctx do
        add_without_apm(options, *messages, &block)
      end
    end
  end
end