Skip to content

Logging Instrumentation gives Exception: Invalid type when an exception is passed directly to logging handler  #2768

Closed
@meldsza

Description

@meldsza

Describe your environment

OS: Mac and RHEL 9
Python version: python 3.12
Package version: 0.47b0

What happened?

The Opentelemetry Logging instrumentation gives an exception when logging an exception directly.

Steps to Reproduce

Provided below is a minimal example to reproduce this issue

import logging
import sys

from opentelemetry import trace

tracer = trace.get_tracer_provider().get_tracer(__name__)


# Trace context correlation
with tracer.start_as_current_span("foo"):
    # Do something
    current_span = trace.get_current_span()
    current_span.add_event("This is a span event")
    logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))
    logging.getLogger().error(ValueError("Test"))

Run this using opentelemetry-instrument --traces_exporter none --logs_exporter otlp python example.py

Expected Result

No exception is raised and the log is transported successfully to the otel collector.

Actual Result

An exception is raised and the log is not transported to the collector

otel-logs-py3.12meldsza@MacBook-Pro otel-logs % opentelemetry-instrument --traces_exporter none --logs_exporter otlp python example.py
Test
Exception while exporting logs.
Traceback (most recent call last):
  File "/Users/meldsza/Desktop/work/repos/otel-logs/.venv/lib/python3.12/site-packages/opentelemetry/sdk/_logs/_internal/export/__init__.py", line 311, in _export_batch
    self._exporter.export(self._log_records[:idx])  # type: ignore
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/meldsza/Desktop/work/repos/otel-logs/.venv/lib/python3.12/site-packages/opentelemetry/exporter/otlp/proto/http/_log_exporter/__init__.py", line 138, in export
    serialized_data = encode_logs(batch).SerializeToString()
                      ^^^^^^^^^^^^^^^^^^
  File "/Users/meldsza/Desktop/work/repos/otel-logs/.venv/lib/python3.12/site-packages/opentelemetry/exporter/otlp/proto/common/_internal/_log_encoder/__init__.py", line 38, in encode_logs
    return ExportLogsServiceRequest(resource_logs=_encode_resource_logs(batch))
                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/meldsza/Desktop/work/repos/otel-logs/.venv/lib/python3.12/site-packages/opentelemetry/exporter/otlp/proto/common/_internal/_log_encoder/__init__.py", line 72, in _encode_resource_logs
    pb2_log = _encode_log(sdk_log)
              ^^^^^^^^^^^^^^^^^^^^
  File "/Users/meldsza/Desktop/work/repos/otel-logs/.venv/lib/python3.12/site-packages/opentelemetry/exporter/otlp/proto/common/_internal/_log_encoder/__init__.py", line 58, in _encode_log
    body=_encode_value(log_data.log_record.body),
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/meldsza/Desktop/work/repos/otel-logs/.venv/lib/python3.12/site-packages/opentelemetry/exporter/otlp/proto/common/_internal/__init__.py", line 88, in _encode_value
    raise Exception(f"Invalid type {type(value)} of value {value}")
Exception: Invalid type <class 'ValueError'> of value Test

Additional context

No response

Would you like to implement a fix?

None

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions