Skip to content

Commit 6f8d915

Browse files
committed
opentelemetry-exporter-otlp-proto-common: permit to serialize null values in logs
1 parent 5460200 commit 6f8d915

File tree

3 files changed

+66
-7
lines changed

3 files changed

+66
-7
lines changed

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

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ def _encode_resource(resource: Resource) -> PB2Resource:
6666
return PB2Resource(attributes=_encode_attributes(resource.attributes))
6767

6868

69-
def _encode_value(value: Any) -> PB2AnyValue:
69+
def _encode_value(
70+
value: Any, allow_null: bool = False
71+
) -> Optional[PB2AnyValue]:
72+
if allow_null is True and value is None:
73+
return None
7074
if isinstance(value, bool):
7175
return PB2AnyValue(bool_value=value)
7276
if isinstance(value, str):
@@ -79,19 +83,26 @@ def _encode_value(value: Any) -> PB2AnyValue:
7983
return PB2AnyValue(bytes_value=value)
8084
if isinstance(value, Sequence):
8185
return PB2AnyValue(
82-
array_value=PB2ArrayValue(values=[_encode_value(v) for v in value])
86+
array_value=PB2ArrayValue(
87+
values=[_encode_value(v, allow_null=allow_null) for v in value]
88+
)
8389
)
8490
elif isinstance(value, Mapping):
8591
return PB2AnyValue(
8692
kvlist_value=PB2KeyValueList(
87-
values=[_encode_key_value(str(k), v) for k, v in value.items()]
93+
values=[
94+
_encode_key_value(str(k), v, allow_null=allow_null)
95+
for k, v in value.items()
96+
]
8897
)
8998
)
9099
raise Exception(f"Invalid type {type(value)} of value {value}")
91100

92101

93-
def _encode_key_value(key: str, value: Any) -> PB2KeyValue:
94-
return PB2KeyValue(key=key, value=_encode_value(value))
102+
def _encode_key_value(key: str, value: Any, allow_null=False) -> PB2KeyValue:
103+
return PB2KeyValue(
104+
key=key, value=_encode_value(value, allow_null=allow_null)
105+
)
95106

96107

97108
def _encode_span_id(span_id: int) -> bytes:

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def _encode_log(log_data: LogData) -> PB2LogRecord:
5555
span_id=span_id,
5656
trace_id=trace_id,
5757
flags=int(log_data.log_record.trace_flags),
58-
body=_encode_value(body) if body is not None else None,
58+
body=_encode_value(body, allow_null=True),
5959
severity_text=log_data.log_record.severity_text,
6060
attributes=_encode_attributes(log_data.log_record.attributes),
6161
dropped_attributes_count=log_data.log_record.dropped_attributes,

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

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,25 @@ def _get_sdk_log_data() -> List[LogData]:
154154
),
155155
)
156156

157-
return [log1, log2, log3, log4]
157+
log5 = LogData(
158+
log_record=SDKLogRecord(
159+
timestamp=1644650584292683009,
160+
observed_timestamp=1644650584292683010,
161+
trace_id=212592107417388365804938480559624925555,
162+
span_id=6077757853989569445,
163+
trace_flags=TraceFlags(0x01),
164+
severity_text="INFO",
165+
severity_number=SeverityNumber.INFO,
166+
body={"error": None},
167+
resource=SDKResource({}),
168+
attributes={},
169+
),
170+
instrumentation_scope=InstrumentationScope(
171+
"last_name", "last_version"
172+
),
173+
)
174+
175+
return [log1, log2, log3, log4, log5]
158176

159177
def get_test_logs(
160178
self,
@@ -287,6 +305,36 @@ def get_test_logs(
287305
),
288306
],
289307
),
308+
PB2ResourceLogs(
309+
resource=PB2Resource(),
310+
scope_logs=[
311+
PB2ScopeLogs(
312+
scope=PB2InstrumentationScope(
313+
name="last_name",
314+
version="last_version",
315+
),
316+
log_records=[
317+
PB2LogRecord(
318+
time_unix_nano=1644650584292683009,
319+
observed_time_unix_nano=1644650584292683010,
320+
trace_id=_encode_trace_id(
321+
212592107417388365804938480559624925555
322+
),
323+
span_id=_encode_span_id(
324+
6077757853989569445,
325+
),
326+
flags=int(TraceFlags(0x01)),
327+
severity_text="INFO",
328+
severity_number=SeverityNumber.INFO.value,
329+
body=_encode_value(
330+
{"error": None}, allow_null=True
331+
),
332+
attributes={},
333+
),
334+
],
335+
),
336+
],
337+
),
290338
]
291339
)
292340

0 commit comments

Comments
 (0)