Skip to content

[logs-api/sdk] Rename several classes from Log to LogRecord #4647

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
([#4637](https://github.com/open-telemetry/opentelemetry-python/pull/4637))
- Logging API accepts optional `context`; deprecates `trace_id`, `span_id`, `trace_flags`.
([#4597](https://github.com/open-telemetry/opentelemetry-python/pull/4597))
- Rename several classes from Log to LogRecord
([#4647](https://github.com/open-telemetry/opentelemetry-python/pull/4647))

## Version 1.34.0/0.55b0 (2025-06-04)

Expand Down
7 changes: 5 additions & 2 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,11 @@
"py:class",
"opentelemetry.proto.collector.metrics.v1.metrics_service_pb2.ExportMetricsServiceRequest",
),
("py:class", "opentelemetry.sdk._logs._internal.export.LogExporter"),
("py:class", "opentelemetry.sdk._logs._internal.export.LogExportResult"),
("py:class", "opentelemetry.sdk._logs._internal.export.LogRecordExporter"),
(
"py:class",
"opentelemetry.sdk._logs._internal.export.LogRecordExportResult",
),
(
"py:class",
"opentelemetry.proto.collector.logs.v1.logs_service_pb2.ExportLogsServiceRequest",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@
ResourceLogs,
ScopeLogs,
)
from opentelemetry.sdk._logs import LogData
from opentelemetry.sdk._logs import LogRecordData


def encode_logs(batch: Sequence[LogData]) -> ExportLogsServiceRequest:
def encode_logs(batch: Sequence[LogRecordData]) -> ExportLogsServiceRequest:
return ExportLogsServiceRequest(resource_logs=_encode_resource_logs(batch))


def _encode_log(log_data: LogData) -> PB2LogRecord:
def _encode_log(log_data: LogRecordData) -> PB2LogRecord:
span_id = (
None
if log_data.log_record.span_id == 0
Expand Down Expand Up @@ -65,7 +65,9 @@ def _encode_log(log_data: LogData) -> PB2LogRecord:
)


def _encode_resource_logs(batch: Sequence[LogData]) -> List[ResourceLogs]:
def _encode_resource_logs(
batch: Sequence[LogRecordData],
) -> List[ResourceLogs]:
sdk_resource_logs = defaultdict(lambda: defaultdict(list))

for sdk_log in batch:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@
from opentelemetry.proto.resource.v1.resource_pb2 import (
Resource as PB2Resource,
)
from opentelemetry.sdk._logs import LogData, LogLimits
from opentelemetry.sdk._logs import LogRecord as SDKLogRecord
from opentelemetry.sdk._logs import LogRecordData, LogRecordLimits
from opentelemetry.sdk.resources import Resource as SDKResource
from opentelemetry.sdk.util.instrumentation import InstrumentationScope
from opentelemetry.trace import TraceFlags
Expand Down Expand Up @@ -83,8 +83,8 @@ def test_dropped_attributes_count(self):
)

@staticmethod
def _get_sdk_log_data() -> List[LogData]:
log1 = LogData(
def _get_sdk_log_data() -> List[LogRecordData]:
log1 = LogRecordData(
log_record=SDKLogRecord(
timestamp=1644650195189786880,
observed_timestamp=1644650195189786881,
Expand All @@ -105,7 +105,7 @@ def _get_sdk_log_data() -> List[LogData]:
),
)

log2 = LogData(
log2 = LogRecordData(
log_record=SDKLogRecord(
timestamp=1644650249738562048,
observed_timestamp=1644650249738562049,
Expand All @@ -123,7 +123,7 @@ def _get_sdk_log_data() -> List[LogData]:
),
)

log3 = LogData(
log3 = LogRecordData(
log_record=SDKLogRecord(
timestamp=1644650427658989056,
observed_timestamp=1644650427658989057,
Expand All @@ -139,7 +139,7 @@ def _get_sdk_log_data() -> List[LogData]:
instrumentation_scope=None,
)

log4 = LogData(
log4 = LogRecordData(
log_record=SDKLogRecord(
timestamp=1644650584292683008,
observed_timestamp=1644650584292683009,
Expand All @@ -160,7 +160,7 @@ def _get_sdk_log_data() -> List[LogData]:
),
)

log5 = LogData(
log5 = LogRecordData(
log_record=SDKLogRecord(
timestamp=1644650584292683009,
observed_timestamp=1644650584292683010,
Expand All @@ -178,7 +178,7 @@ def _get_sdk_log_data() -> List[LogData]:
),
)

log6 = LogData(
log6 = LogRecordData(
log_record=SDKLogRecord(
timestamp=1644650584292683022,
observed_timestamp=1644650584292683022,
Expand All @@ -201,7 +201,7 @@ def _get_sdk_log_data() -> List[LogData]:
),
)

log7 = LogData(
log7 = LogRecordData(
log_record=SDKLogRecord(
timestamp=1644650584292683033,
observed_timestamp=1644650584292683033,
Expand All @@ -225,7 +225,7 @@ def _get_sdk_log_data() -> List[LogData]:
),
)

log8 = LogData(
log8 = LogRecordData(
log_record=SDKLogRecord(
timestamp=1644650584292683044,
observed_timestamp=1644650584292683044,
Expand Down Expand Up @@ -543,8 +543,8 @@ def get_test_logs(
return sdk_logs, pb2_service_request

@staticmethod
def _get_test_logs_dropped_attributes() -> List[LogData]:
log1 = LogData(
def _get_test_logs_dropped_attributes() -> List[LogRecordData]:
log1 = LogRecordData(
log_record=SDKLogRecord(
timestamp=1644650195189786880,
trace_id=89564621134313219400156819398935297684,
Expand All @@ -555,14 +555,14 @@ def _get_test_logs_dropped_attributes() -> List[LogData]:
body="Do not go gentle into that good night. Rage, rage against the dying of the light",
resource=SDKResource({"first_resource": "value"}),
attributes={"a": 1, "b": "c", "user_id": "B121092"},
limits=LogLimits(max_attributes=1),
limits=LogRecordLimits(max_attributes=1),
),
instrumentation_scope=InstrumentationScope(
"first_name", "first_version"
),
)

log2 = LogData(
log2 = LogRecordData(
log_record=SDKLogRecord(
timestamp=1644650249738562048,
trace_id=0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,12 @@
from opentelemetry.proto.collector.logs.v1.logs_service_pb2_grpc import (
LogsServiceStub,
)
from opentelemetry.sdk._logs import LogData
from opentelemetry.sdk._logs import LogRecord as SDKLogRecord
from opentelemetry.sdk._logs.export import LogExporter, LogExportResult
from opentelemetry.sdk._logs import LogRecordData
from opentelemetry.sdk._logs.export import (
LogRecordExporter,
LogRecordExportResult,
)
from opentelemetry.sdk.environment_variables import (
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE,
OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE,
Expand All @@ -44,10 +47,12 @@


class OTLPLogExporter(
LogExporter,
OTLPExporterMixin[SDKLogRecord, ExportLogsServiceRequest, LogExportResult],
LogRecordExporter,
OTLPExporterMixin[
SDKLogRecord, ExportLogsServiceRequest, LogRecordExportResult
],
):
_result = LogExportResult
_result = LogRecordExportResult
_stub = LogsServiceStub

def __init__(
Expand Down Expand Up @@ -103,11 +108,11 @@ def __init__(
)

def _translate_data(
self, data: Sequence[LogData]
self, data: Sequence[LogRecordData]
) -> ExportLogsServiceRequest:
return encode_logs(data)

def export(self, batch: Sequence[LogData]) -> LogExportResult:
def export(self, batch: Sequence[LogRecordData]) -> LogRecordExportResult:
return self._export(batch)

def shutdown(self, timeout_millis: float = 30_000, **kwargs) -> None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
from opentelemetry.proto.resource.v1.resource_pb2 import (
Resource as OTLPResource,
)
from opentelemetry.sdk._logs import LogData, LogRecord
from opentelemetry.sdk._logs import LogRecord, LogRecordData
from opentelemetry.sdk.environment_variables import (
OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE,
OTEL_EXPORTER_OTLP_LOGS_CLIENT_CERTIFICATE,
Expand All @@ -59,7 +59,7 @@
class TestOTLPLogExporter(TestCase):
def setUp(self):
self.exporter = OTLPLogExporter()
self.log_data_1 = LogData(
self.log_data_1 = LogRecordData(
log_record=LogRecord(
timestamp=int(time.time() * 1e9),
trace_id=2604504634922341076776623263868986797,
Expand All @@ -75,7 +75,7 @@ def setUp(self):
"first_name", "first_version"
),
)
self.log_data_2 = LogData(
self.log_data_2 = LogRecordData(
log_record=LogRecord(
timestamp=int(time.time() * 1e9),
trace_id=2604504634922341076776623263868986799,
Expand All @@ -91,7 +91,7 @@ def setUp(self):
"second_name", "second_version"
),
)
self.log_data_3 = LogData(
self.log_data_3 = LogRecordData(
log_record=LogRecord(
timestamp=int(time.time() * 1e9),
trace_id=2604504634922341076776623263868986800,
Expand All @@ -106,7 +106,7 @@ def setUp(self):
"third_name", "third_version"
),
)
self.log_data_4 = LogData(
self.log_data_4 = LogRecordData(
log_record=LogRecord(
timestamp=int(time.time() * 1e9),
trace_id=0,
Expand All @@ -121,7 +121,7 @@ def setUp(self):
"fourth_name", "fourth_version"
),
)
self.log_data_5 = LogData(
self.log_data_5 = LogRecordData(
log_record=LogRecord(
timestamp=int(time.time() * 1e9),
trace_id=2604504634922341076776623263868986801,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@


# The below tests use this test SpanExporter and Spans, but are testing the
# underlying behavior in the mixin. A MetricExporter or LogExporter could
# underlying behavior in the mixin. A MetricExporter or LogRecordExporter could
# just as easily be used.
class OTLPSpanExporterForTesting(
SpanExporter,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@
from opentelemetry.exporter.otlp.proto.http._common import (
_is_retryable,
)
from opentelemetry.sdk._logs import LogData
from opentelemetry.sdk._logs import LogRecordData
from opentelemetry.sdk._logs.export import (
LogExporter,
LogExportResult,
LogRecordExporter,
LogRecordExportResult,
)
from opentelemetry.sdk.environment_variables import (
OTEL_EXPORTER_OTLP_CERTIFICATE,
Expand Down Expand Up @@ -65,7 +65,7 @@
_MAX_RETRYS = 6


class OTLPLogExporter(LogExporter):
class OTLPLogExporter(LogRecordExporter):
def __init__(
self,
endpoint: Optional[str] = None,
Expand Down Expand Up @@ -156,17 +156,17 @@ def _export(self, serialized_data: bytes, timeout_sec: float):
)
return resp

def export(self, batch: Sequence[LogData]) -> LogExportResult:
def export(self, batch: Sequence[LogRecordData]) -> LogRecordExportResult:
if self._shutdown:
_logger.warning("Exporter already shutdown, ignoring batch")
return LogExportResult.FAILURE
return LogRecordExportResult.FAILURE

serialized_data = encode_logs(batch).SerializeToString()
deadline_sec = time() + self._timeout
for retry_num in range(_MAX_RETRYS):
resp = self._export(serialized_data, deadline_sec - time())
if resp.ok:
return LogExportResult.SUCCESS
return LogRecordExportResult.SUCCESS
# multiplying by a random number between .8 and 1.2 introduces a +/20% jitter to each backoff.
backoff_seconds = 2**retry_num * random.uniform(0.8, 1.2)
if (
Expand All @@ -179,15 +179,15 @@ def export(self, batch: Sequence[LogData]) -> LogExportResult:
resp.status_code,
resp.text,
)
return LogExportResult.FAILURE
return LogRecordExportResult.FAILURE
_logger.warning(
"Transient error %s encountered while exporting logs batch, retrying in %.2fs.",
resp.reason,
backoff_seconds,
)
sleep(backoff_seconds)
# Not possible to reach here but the linter is complaining.
return LogExportResult.FAILURE
return LogRecordExportResult.FAILURE

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