diff --git a/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs_exporter.rb b/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs_exporter.rb index da6f8331c3..1b18253b49 100644 --- a/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs_exporter.rb +++ b/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs_exporter.rb @@ -70,6 +70,16 @@ def initialize(endpoint: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPOR @timeout = timeout.to_f @compression = compression @shutdown = false + @logger = create_logger + end + + def create_logger + logger = Logger.new($stdout, level: ENV['OTEL_LOG_LEVEL'] || Logger::INFO) + # @skip_instrumenting prevents Ruby Logger instrumentation from + # triggering a stack overflow. Logs emitted using OpenTelemetry.logger + # will not be turned into OpenTelemetry LogRecords. + logger.instance_variable_set(:@skip_instrumenting, true) + logger end # Called to export sampled {OpenTelemetry::SDK::Logs::LogRecordData} structs. @@ -128,11 +138,11 @@ def around_request end def send_bytes(bytes, timeout:) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity - logger.error("From Logs exporter: bytes.nil? #{bytes.nil?}") + @logger.error("From Logs exporter: bytes.nil? #{bytes.nil?}") return FAILURE if bytes.nil? - logger.error("LOGZ: path - #{@path}") - logger.error("LOGZ: compression - #{@compression}") + @logger.error("LOGZ: path - #{@path}") + @logger.error("LOGZ: compression - #{@compression}") request = Net::HTTP::Post.new(@path) if @compression == 'gzip' request.add_field('Content-Encoding', 'gzip') @@ -159,7 +169,7 @@ def send_bytes(bytes, timeout:) # rubocop:disable Metrics/CyclomaticComplexity, @http.start unless @http.started? response = measure_request_duration { @http.request(request) } - logger.error("LOGZ response: #{response}") + @logger.error("LOGZ response: #{response}") case response when Net::HTTPOK response.body # Read and discard body @@ -266,7 +276,7 @@ def backoff?(retry_count:, reason:, retry_after: nil) # rubocop:disable Metrics/ end def encode(log_record_data) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity - logger.error("Logs exporter made it to encode!") + @logger.error("Logs exporter made it to encode!") Opentelemetry::Proto::Collector::Logs::V1::ExportLogsServiceRequest.encode( Opentelemetry::Proto::Collector::Logs::V1::ExportLogsServiceRequest.new( resource_logs: log_record_data