Skip to content

Commit b44507a

Browse files
Merge branch 'main' into issue4803_partial_success_logging
2 parents 10aedae + 546e47b commit b44507a

File tree

22 files changed

+186
-101
lines changed

22 files changed

+186
-101
lines changed

CHANGELOG.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2525
([#4791](https://github.com/open-telemetry/opentelemetry-python/pull/4791))
2626
- [BREAKING] Remove LogData and extend SDK LogRecord to have instrumentation scope
2727
([#4676](https://github.com/open-telemetry/opentelemetry-python/pull/4676))
28+
- [BREAKING] Rename several classes from Log to LogRecord
29+
([#4647](https://github.com/open-telemetry/opentelemetry-python/pull/4647))
2830

2931
**Migration Guide:**
3032

@@ -34,12 +36,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3436
```python
3537
# Before
3638
from opentelemetry.sdk._logs import LogData
37-
def export(self, batch: Sequence[LogData]) -> LogExportResult:
39+
def export(self, batch: Sequence[LogData]) -> LogRecordExportResult:
3840
...
3941

4042
# After
4143
from opentelemetry.sdk._logs import ReadableLogRecord
42-
def export(self, batch: Sequence[ReadableLogRecord]) -> LogExportResult:
44+
def export(self, batch: Sequence[ReadableLogRecord]) -> LogRecordExportResult:
4345
...
4446
```
4547

@@ -67,7 +69,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6769
- `log_record.log_record` - The API LogRecord (contains body, severity, attributes, etc.)
6870
- `log_record.resource` - The Resource
6971
- `log_record.instrumentation_scope` - The InstrumentationScope (now included, was in LogData before)
70-
- `log_record.limits` - The LogLimits
72+
- `log_record.limits` - The LogRecordLimits
7173

7274
## Version 1.38.0/0.59b0 (2025-10-16)
7375

docs/conf.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,11 @@
145145
"py:class",
146146
"opentelemetry.proto.collector.metrics.v1.metrics_service_pb2.ExportMetricsServiceRequest",
147147
),
148-
("py:class", "opentelemetry.sdk._logs._internal.export.LogExporter"),
149-
("py:class", "opentelemetry.sdk._logs._internal.export.LogExportResult"),
148+
("py:class", "opentelemetry.sdk._logs._internal.export.LogRecordExporter"),
149+
(
150+
"py:class",
151+
"opentelemetry.sdk._logs._internal.export.LogRecordExportResult",
152+
),
150153
(
151154
"py:class",
152155
"opentelemetry.proto.collector.logs.v1.logs_service_pb2.ExportLogsServiceRequest",

exporter/opentelemetry-exporter-otlp-proto-common/tests/test_log_encoder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
from opentelemetry.proto.resource.v1.resource_pb2 import (
4646
Resource as PB2Resource,
4747
)
48-
from opentelemetry.sdk._logs import LogLimits, ReadWriteLogRecord
48+
from opentelemetry.sdk._logs import LogRecordLimits, ReadWriteLogRecord
4949
from opentelemetry.sdk.resources import Resource as SDKResource
5050
from opentelemetry.sdk.util.instrumentation import InstrumentationScope
5151
from opentelemetry.trace import (
@@ -667,7 +667,7 @@ def _get_test_logs_dropped_attributes() -> List[ReadWriteLogRecord]:
667667
attributes={"a": 1, "b": "c", "user_id": "B121092"},
668668
),
669669
resource=SDKResource({"first_resource": "value"}),
670-
limits=LogLimits(max_attributes=1),
670+
limits=LogRecordLimits(max_attributes=1),
671671
instrumentation_scope=InstrumentationScope(
672672
"first_name", "first_version"
673673
),

exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/_log_exporter/__init__.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@
3030
LogsServiceStub,
3131
)
3232
from opentelemetry.sdk._logs import ReadableLogRecord
33-
from opentelemetry.sdk._logs.export import LogExporter, LogExportResult
33+
from opentelemetry.sdk._logs.export import (
34+
LogRecordExporter,
35+
LogRecordExportResult,
36+
)
3437
from opentelemetry.sdk.environment_variables import (
3538
_OTEL_PYTHON_EXPORTER_OTLP_GRPC_LOGS_CREDENTIAL_PROVIDER,
3639
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE,
@@ -45,11 +48,11 @@
4548

4649

4750
class OTLPLogExporter(
48-
LogExporter,
51+
LogRecordExporter,
4952
OTLPExporterMixin[
5053
Sequence[ReadableLogRecord],
5154
ExportLogsServiceRequest,
52-
LogExportResult,
55+
LogRecordExportResult,
5356
LogsServiceStub,
5457
],
5558
):
@@ -101,7 +104,7 @@ def __init__(
101104
timeout=timeout or environ_timeout,
102105
compression=compression,
103106
stub=LogsServiceStub,
104-
result=LogExportResult,
107+
result=LogRecordExportResult,
105108
channel_options=channel_options,
106109
)
107110

@@ -118,7 +121,7 @@ def _log_partial_success(self, partial_success):
118121
def export( # type: ignore [reportIncompatibleMethodOverride]
119122
self,
120123
batch: Sequence[ReadableLogRecord],
121-
) -> Literal[LogExportResult.SUCCESS, LogExportResult.FAILURE]:
124+
) -> Literal[LogRecordExportResult.SUCCESS, LogRecordExportResult.FAILURE]:
122125
return OTLPExporterMixin._export(self, batch)
123126

124127
def shutdown(self, timeout_millis: float = 30_000, **kwargs) -> None:

exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
)
8282
from opentelemetry.proto.resource.v1.resource_pb2 import Resource # noqa: F401
8383
from opentelemetry.sdk._logs import ReadableLogRecord
84-
from opentelemetry.sdk._logs.export import LogExportResult
84+
from opentelemetry.sdk._logs.export import LogRecordExportResult
8585
from opentelemetry.sdk._shared_internal import DuplicateFilter
8686
from opentelemetry.sdk.environment_variables import (
8787
_OTEL_PYTHON_EXPORTER_OTLP_GRPC_CREDENTIAL_PROVIDER,
@@ -133,7 +133,7 @@
133133
)
134134
ExportResultT = TypeVar(
135135
"ExportResultT",
136-
LogExportResult,
136+
LogRecordExportResult,
137137
MetricExportResult,
138138
SpanExportResult,
139139
)

exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_exporter_mixin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565

6666

6767
# The below tests use this test SpanExporter and Spans, but are testing the
68-
# underlying behavior in the mixin. A MetricExporter or LogExporter could
68+
# underlying behavior in the mixin. A MetricExporter or LogRecordExporter could
6969
# just as easily be used.
7070
class OTLPSpanExporterForTesting(
7171
SpanExporter,

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/_log_exporter/__init__.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
)
3737
from opentelemetry.sdk._logs import ReadableLogRecord
3838
from opentelemetry.sdk._logs.export import (
39-
LogExporter,
40-
LogExportResult,
39+
LogRecordExporter,
40+
LogRecordExportResult,
4141
)
4242
from opentelemetry.sdk._shared_internal import DuplicateFilter
4343
from opentelemetry.sdk.environment_variables import (
@@ -71,7 +71,7 @@
7171
_MAX_RETRYS = 6
7272

7373

74-
class OTLPLogExporter(LogExporter):
74+
class OTLPLogExporter(LogRecordExporter):
7575
def __init__(
7676
self,
7777
endpoint: Optional[str] = None,
@@ -176,17 +176,19 @@ def _export(
176176
)
177177
return resp
178178

179-
def export(self, batch: Sequence[ReadableLogRecord]) -> LogExportResult:
179+
def export(
180+
self, batch: Sequence[ReadableLogRecord]
181+
) -> LogRecordExportResult:
180182
if self._shutdown:
181183
_logger.warning("Exporter already shutdown, ignoring batch")
182-
return LogExportResult.FAILURE
184+
return LogRecordExportResult.FAILURE
183185

184186
serialized_data = encode_logs(batch).SerializeToString()
185187
deadline_sec = time() + self._timeout
186188
for retry_num in range(_MAX_RETRYS):
187189
resp = self._export(serialized_data, deadline_sec - time())
188190
if resp.ok:
189-
return LogExportResult.SUCCESS
191+
return LogRecordExportResult.SUCCESS
190192
# multiplying by a random number between .8 and 1.2 introduces a +/20% jitter to each backoff.
191193
backoff_seconds = 2**retry_num * random.uniform(0.8, 1.2)
192194
if (
@@ -200,7 +202,7 @@ def export(self, batch: Sequence[ReadableLogRecord]) -> LogExportResult:
200202
resp.status_code,
201203
resp.text,
202204
)
203-
return LogExportResult.FAILURE
205+
return LogRecordExportResult.FAILURE
204206
_logger.warning(
205207
"Transient error %s encountered while exporting logs batch, retrying in %.2fs.",
206208
resp.reason,
@@ -210,7 +212,7 @@ def export(self, batch: Sequence[ReadableLogRecord]) -> LogExportResult:
210212
if shutdown:
211213
_logger.warning("Shutdown in progress, aborting retry.")
212214
break
213-
return LogExportResult.FAILURE
215+
return LogRecordExportResult.FAILURE
214216

215217
def force_flush(self, timeout_millis: float = 10_000) -> bool:
216218
"""Nothing is buffered in this exporter, so this method does nothing."""

exporter/opentelemetry-exporter-otlp-proto-http/tests/test_proto_log_exporter.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
ExportLogsServiceRequest,
4141
)
4242
from opentelemetry.sdk._logs import ReadWriteLogRecord
43-
from opentelemetry.sdk._logs.export import LogExportResult
43+
from opentelemetry.sdk._logs.export import LogRecordExportResult
4444
from opentelemetry.sdk.environment_variables import (
4545
_OTEL_PYTHON_EXPORTER_OTLP_HTTP_LOGS_CREDENTIAL_PROVIDER,
4646
OTEL_EXPORTER_OTLP_CERTIFICATE,
@@ -454,7 +454,8 @@ def test_2xx_status_code(self, mock_otlp_metric_exporter):
454454
"""
455455

456456
self.assertEqual(
457-
OTLPLogExporter().export(MagicMock()), LogExportResult.SUCCESS
457+
OTLPLogExporter().export(MagicMock()),
458+
LogRecordExportResult.SUCCESS,
458459
)
459460

460461
@patch.object(Session, "post")
@@ -470,7 +471,7 @@ def test_retry_timeout(self, mock_post):
470471
# Set timeout to 1.5 seconds
471472
self.assertEqual(
472473
exporter.export(self._get_sdk_log_data()),
473-
LogExportResult.FAILURE,
474+
LogRecordExportResult.FAILURE,
474475
)
475476
after = time.time()
476477
# First call at time 0, second at time 1, then an early return before the second backoff sleep b/c it would exceed timeout.

opentelemetry-sdk/benchmarks/logs/test_benchmark_logging_handler.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44

55
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
66
from opentelemetry.sdk._logs.export import (
7-
InMemoryLogExporter,
7+
InMemoryLogRecordExporter,
88
SimpleLogRecordProcessor,
99
)
1010

1111

1212
def _set_up_logging_handler(level):
1313
logger_provider = LoggerProvider()
14-
exporter = InMemoryLogExporter()
14+
exporter = InMemoryLogRecordExporter()
1515
processor = SimpleLogRecordProcessor(exporter=exporter)
1616
logger_provider.add_log_record_processor(processor)
1717
handler = LoggingHandler(level=level, logger_provider=logger_provider)

opentelemetry-sdk/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ parentbased_traceidratio = "opentelemetry.sdk.trace.sampling:ParentBasedTraceIdR
4949
sdk_logger_provider = "opentelemetry.sdk._logs:LoggerProvider"
5050

5151
[project.entry-points.opentelemetry_logs_exporter]
52-
console = "opentelemetry.sdk._logs.export:ConsoleLogExporter"
52+
console = "opentelemetry.sdk._logs.export:ConsoleLogRecordExporter"
5353

5454
[project.entry-points.opentelemetry_meter_provider]
5555
sdk_meter_provider = "opentelemetry.sdk.metrics:MeterProvider"

0 commit comments

Comments
 (0)