Skip to content

Commit 4ce99ef

Browse files
chore(tracer): add metastruct data to span repr for debug logs (#16278)
## Description Add metastruct data to span repr for debug logs. Each value must be a dictionary. Add the list of keys of each value or an error string if it's not a dict ## Testing Add unit test APPSEC-61027
1 parent 14c48c6 commit 4ce99ef

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

ddtrace/_trace/span.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,10 @@ def __exit__(
782782

783783
def __repr__(self) -> str:
784784
"""Return a detailed string representation of a span."""
785+
meta = {
786+
k: v.keys() if isinstance(v, dict) else f"wrong type [{type(v).__name__}]"
787+
for k, v in self._meta_struct.items()
788+
}
785789
return (
786790
f"Span(name='{self.name}', "
787791
f"span_id={self.span_id}, "
@@ -799,7 +803,8 @@ def __repr__(self) -> str:
799803
f"links={self._links}, "
800804
f"events={self._events}, "
801805
f"context={self.context}, "
802-
f"service_entry_span_name={self._service_entry_span.name})"
806+
f"service_entry_span_name={self._service_entry_span.name}), "
807+
f"metastruct={meta}"
803808
)
804809

805810
def __str__(self) -> str:

tests/tracer/test_span.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,3 +987,11 @@ def deep_error(n):
987987
split_result = [s + "\n" for item in split_result for s in item.split("\n") if s]
988988
assert len(split_result) < 8 # Value is 5 for Python 3.10
989989
assert len(result) < 410 # Value is 377 for Python 3.10
990+
991+
992+
def test_span_repr_metastruct():
993+
span = Span("span_test")
994+
assert "metastruct={}" in repr(span)
995+
span._set_struct_tag("key1", {"a": 1, "b": 2})
996+
span._set_struct_tag("key2", ["bad item"]) # type: ignore
997+
assert "metastruct={'key1': dict_keys(['a', 'b']), 'key2': 'wrong type [list]'}" in repr(span)

0 commit comments

Comments
 (0)