open-telemetry / open-telemetry/opentelemetry-python
Feature Request: Support for `pathlib.Path` objects in OTLP Exporter attributes
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 2.6k
- Forks
- 1k
- Avg merge
- 4d 15h
- Merged PRs (30d)
- 19
Description
Is your feature request related to a problem?
Currently, passing a pathlib.Path object as an attribute value to a LogRecord (or Span) causes the OTLP Exporter to fail with an Exception: Invalid type <class 'pathlib.PosixPath'>. While I understand the OTLP spec is strict about primitive types, pathlib.Path is a Python standard library type frequently used in logging context (e.g., model paths, log file locations).
Describe the solution you'd like
It would be helpful if the OpenTelemetry Python SDK could automatically coerce pathlib.Path objects to strings during the OTLP encoding process, or provide a standard hook/configuration to handle common non-primitive types without crashing the exporter.
Describe alternatives you've considered
I am currently using a custom structlog processor to manually stringify all Path objects before they reach the OpenTelemetry logging bridge:
def stringify_non_standard_types(event_dict):
for key, value in event_dict.items():
if isinstance(value, Path):
event_dict[key] = str(value)
return event_dict
While this works, it requires manual configuration for every project and doesn't cover cases where third-party instrumentations might inject Path objects into the context.
Additional Context
Stack trace:
File ".../opentelemetry/exporter/otlp/proto/common/_internal/__init__.py", line 100, in _encode_value
raise Exception(f"Invalid type {type(value)} of value {value}")
Exception: Invalid type <class 'pathlib.PosixPath'> of value /Users/user/models/my-model
Would you like to implement a fix?
Yes
Tip
React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding +1 or me too, to help us triage it. Learn more here.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in opentelemetry/exporter/otlp/proto/common/_internal/init.py at _encode_value, where pathlib.PosixPath currently raises an exception. Trace how OTLP attributes for LogRecord and Span reach this encoder, then verify that Path values are handled as strings without breaking existing primitive encoding or the relevant exporter tests.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- observability-sre
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 66/100