Skip to content

Commit 6812da2

Browse files
authored
opentelemetry-sdk: serialize logs severity_number as int (#4324)
* opentelemetry-sdk: serialize logs severity_number as int Instead of a string. * Update changelog
1 parent a0304a0 commit 6812da2

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1717
([#4270](https://github.com/open-telemetry/opentelemetry-python/pull/4270))
1818
- api: fix logging of duplicate EventLogger setup warning
1919
([#4299](https://github.com/open-telemetry/opentelemetry-python/pull/4299))
20+
- sdk: fix serialization of logs severity_number field to int
21+
([#4324](https://github.com/open-telemetry/opentelemetry-python/pull/4324))
2022

2123
## Version 1.28.0/0.49b0 (2024-11-05)
2224

opentelemetry-sdk/src/opentelemetry/sdk/_logs/_internal/__init__.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,9 @@ def to_json(self, indent=4) -> str:
221221
return json.dumps(
222222
{
223223
"body": self.body,
224-
"severity_number": repr(self.severity_number),
224+
"severity_number": self.severity_number.value
225+
if self.severity_number is not None
226+
else None,
225227
"severity_text": self.severity_text,
226228
"attributes": (
227229
dict(self.attributes) if bool(self.attributes) else None

opentelemetry-sdk/tests/logs/test_log_record.py

+15-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import unittest
1717
import warnings
1818

19+
from opentelemetry._logs.severity import SeverityNumber
1920
from opentelemetry.attributes import BoundedAttributes
2021
from opentelemetry.sdk._logs import (
2122
LogDroppedAttributesWarning,
@@ -30,7 +31,7 @@ def test_log_record_to_json(self):
3031
expected = json.dumps(
3132
{
3233
"body": "a log line",
33-
"severity_number": "None",
34+
"severity_number": None,
3435
"severity_text": None,
3536
"attributes": None,
3637
"dropped_attributes": 0,
@@ -56,9 +57,21 @@ def test_log_record_to_json(self):
5657
self.assertEqual(expected, actual.to_json(indent=4))
5758
self.assertEqual(
5859
actual.to_json(indent=None),
59-
'{"body": "a log line", "severity_number": "None", "severity_text": null, "attributes": null, "dropped_attributes": 0, "timestamp": "1970-01-01T00:00:00.000000Z", "observed_timestamp": "1970-01-01T00:00:00.000000Z", "trace_id": "", "span_id": "", "trace_flags": null, "resource": {"attributes": {"service.name": "foo"}, "schema_url": ""}}',
60+
'{"body": "a log line", "severity_number": null, "severity_text": null, "attributes": null, "dropped_attributes": 0, "timestamp": "1970-01-01T00:00:00.000000Z", "observed_timestamp": "1970-01-01T00:00:00.000000Z", "trace_id": "", "span_id": "", "trace_flags": null, "resource": {"attributes": {"service.name": "foo"}, "schema_url": ""}}',
6061
)
6162

63+
def test_log_record_to_json_serializes_severity_number_as_int(self):
64+
actual = LogRecord(
65+
timestamp=0,
66+
severity_number=SeverityNumber.WARN,
67+
observed_timestamp=0,
68+
body="a log line",
69+
resource=Resource({"service.name": "foo"}),
70+
)
71+
72+
decoded = json.loads(actual.to_json())
73+
self.assertEqual(SeverityNumber.WARN.value, decoded["severity_number"])
74+
6275
def test_log_record_bounded_attributes(self):
6376
attr = {"key": "value"}
6477

0 commit comments

Comments
 (0)