Skip to content

Commit c9b5077

Browse files
authored
Merge branch 'main' into feature/add_error_handling_for_otlp_exporters
2 parents dfeb67b + 5ddb8e7 commit c9b5077

File tree

72 files changed

+3693
-1134
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+3693
-1134
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
repos:
22
- repo: https://github.com/astral-sh/ruff-pre-commit
33
# Ruff version.
4-
rev: v0.6.9
4+
rev: v0.14.1
55
hooks:
66
# Run the linter.
77
- id: ruff

CHANGELOG.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1414

1515
- docs: Added sqlcommenter example
1616
([#4734](https://github.com/open-telemetry/opentelemetry-python/pull/4734))
17+
- build: bump ruff to 0.14.1
18+
([#4782](https://github.com/open-telemetry/opentelemetry-python/pull/4782))
19+
- Add `opentelemetry-exporter-credential-provider-gcp` as an optional dependency to `opentelemetry-exporter-otlp-proto-grpc`
20+
and `opentelemetry-exporter-otlp-proto-http`
21+
([#4760](https://github.com/open-telemetry/opentelemetry-python/pull/4760))
22+
- semantic-conventions: Bump to 1.38.0
23+
([#4791](https://github.com/open-telemetry/opentelemetry-python/pull/4791))
24+
- [BREAKING] Remove LogData and extend SDK LogRecord to have instrumentation scope
25+
([#4676](https://github.com/open-telemetry/opentelemetry-python/pull/4676))
26+
27+
**Migration Guide:**
28+
29+
`LogData` has been removed. Users should update their code as follows:
30+
31+
- **For Log Exporters:** Change from `Sequence[LogData]` to `Sequence[ReadableLogRecord]`
32+
```python
33+
# Before
34+
from opentelemetry.sdk._logs import LogData
35+
def export(self, batch: Sequence[LogData]) -> LogExportResult:
36+
...
37+
38+
# After
39+
from opentelemetry.sdk._logs import ReadableLogRecord
40+
def export(self, batch: Sequence[ReadableLogRecord]) -> LogExportResult:
41+
...
42+
```
43+
44+
- **For Log Processors:** Use `ReadWriteLogRecord` for processing, `ReadableLogRecord` for exporting
45+
```python
46+
# Before
47+
from opentelemetry.sdk._logs import LogData
48+
def on_emit(self, log_data: LogData):
49+
...
50+
51+
# After
52+
from opentelemetry.sdk._logs import ReadWriteLogRecord, ReadableLogRecord
53+
def on_emit(self, log_record: ReadWriteLogRecord):
54+
# Convert to ReadableLogRecord before exporting
55+
readable = ReadableLogRecord(
56+
log_record=log_record.log_record,
57+
resource=log_record.resource or Resource.create({}),
58+
instrumentation_scope=log_record.instrumentation_scope,
59+
limits=log_record.limits,
60+
)
61+
...
62+
```
63+
64+
- **Accessing log data:** Use the same attributes on `ReadableLogRecord`/`ReadWriteLogRecord`
65+
- `log_record.log_record` - The API LogRecord (contains body, severity, attributes, etc.)
66+
- `log_record.resource` - The Resource
67+
- `log_record.instrumentation_scope` - The InstrumentationScope (now included, was in LogData before)
68+
- `log_record.limits` - The LogLimits
1769

1870
## Version 1.38.0/0.59b0 (2025-10-16)
1971

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ For more information about the approver role, see the [community repository](htt
125125

126126
- [Alex Boten](https://github.com/codeboten)
127127
- [Chris Kleinknecht](https://github.com/c24t)
128-
- [Diego Hurtado](https://github.com/ocelotl), Lightstep
128+
- [Diego Hurtado](https://github.com/ocelotl)
129129
- [Owais Lone](https://github.com/owais)
130130
- [Reiley Yang](https://github.com/reyang)
131131
- [Srikanth Chekuri](https://github.com/srikanthccv)

dev-requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@ psutil==5.9.6
1717
GitPython==3.1.41
1818
pre-commit==3.7.0; python_version >= '3.9'
1919
pre-commit==3.5.0; python_version < '3.9'
20-
ruff==0.6.9
20+
ruff==0.14.1

docs/examples/django/manage.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ def main():
3030
DjangoInstrumentor().instrument()
3131

3232
try:
33-
from django.core.management import execute_from_command_line
33+
from django.core.management import ( # noqa: PLC0415
34+
execute_from_command_line,
35+
)
3436
except ImportError as exc:
3537
raise ImportError(
3638
"Couldn't import Django. Are you sure it's installed and "

exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/_internal/_log_encoder/__init__.py

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,51 +30,55 @@
3030
ResourceLogs,
3131
ScopeLogs,
3232
)
33-
from opentelemetry.sdk._logs import LogData
33+
from opentelemetry.sdk._logs import ReadableLogRecord
3434

3535

36-
def encode_logs(batch: Sequence[LogData]) -> ExportLogsServiceRequest:
36+
def encode_logs(
37+
batch: Sequence[ReadableLogRecord],
38+
) -> ExportLogsServiceRequest:
3739
return ExportLogsServiceRequest(resource_logs=_encode_resource_logs(batch))
3840

3941

40-
def _encode_log(log_data: LogData) -> PB2LogRecord:
42+
def _encode_log(readable_log_record: ReadableLogRecord) -> PB2LogRecord:
4143
span_id = (
4244
None
43-
if log_data.log_record.span_id == 0
44-
else _encode_span_id(log_data.log_record.span_id)
45+
if readable_log_record.log_record.span_id == 0
46+
else _encode_span_id(readable_log_record.log_record.span_id)
4547
)
4648
trace_id = (
4749
None
48-
if log_data.log_record.trace_id == 0
49-
else _encode_trace_id(log_data.log_record.trace_id)
50+
if readable_log_record.log_record.trace_id == 0
51+
else _encode_trace_id(readable_log_record.log_record.trace_id)
5052
)
51-
body = log_data.log_record.body
53+
body = readable_log_record.log_record.body
5254
return PB2LogRecord(
53-
time_unix_nano=log_data.log_record.timestamp,
54-
observed_time_unix_nano=log_data.log_record.observed_timestamp,
55+
time_unix_nano=readable_log_record.log_record.timestamp,
56+
observed_time_unix_nano=readable_log_record.log_record.observed_timestamp,
5557
span_id=span_id,
5658
trace_id=trace_id,
57-
flags=int(log_data.log_record.trace_flags),
59+
flags=int(readable_log_record.log_record.trace_flags),
5860
body=_encode_value(body, allow_null=True),
59-
severity_text=log_data.log_record.severity_text,
61+
severity_text=readable_log_record.log_record.severity_text,
6062
attributes=_encode_attributes(
61-
log_data.log_record.attributes, allow_null=True
63+
readable_log_record.log_record.attributes, allow_null=True
6264
),
63-
dropped_attributes_count=log_data.log_record.dropped_attributes,
65+
dropped_attributes_count=readable_log_record.dropped_attributes,
6466
severity_number=getattr(
65-
log_data.log_record.severity_number, "value", None
67+
readable_log_record.log_record.severity_number, "value", None
6668
),
67-
event_name=log_data.log_record.event_name,
69+
event_name=readable_log_record.log_record.event_name,
6870
)
6971

7072

71-
def _encode_resource_logs(batch: Sequence[LogData]) -> List[ResourceLogs]:
73+
def _encode_resource_logs(
74+
batch: Sequence[ReadableLogRecord],
75+
) -> List[ResourceLogs]:
7276
sdk_resource_logs = defaultdict(lambda: defaultdict(list))
7377

74-
for sdk_log in batch:
75-
sdk_resource = sdk_log.log_record.resource
76-
sdk_instrumentation = sdk_log.instrumentation_scope or None
77-
pb2_log = _encode_log(sdk_log)
78+
for readable_log in batch:
79+
sdk_resource = readable_log.resource
80+
sdk_instrumentation = readable_log.instrumentation_scope or None
81+
pb2_log = _encode_log(readable_log)
7882

7983
sdk_resource_logs[sdk_resource][sdk_instrumentation].append(pb2_log)
8084

exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/_internal/metrics_encoder/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ def _get_temporality(
115115
"CUMULATIVE"
116116
):
117117
_logger.warning(
118-
"Unrecognized OTEL_EXPORTER_METRICS_TEMPORALITY_PREFERENCE"
118+
"Unrecognized OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE"
119119
" value found: "
120120
"%s, "
121121
"using CUMULATIVE",

0 commit comments

Comments
 (0)