Created
March 24, 2023 16:42
-
-
Save adamf/e254a2e5cda0550b15cbbb639abf1d00 to your computer and use it in GitHub Desktop.
Add datadog span & event information to structured logs in a Django app
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import logging | |
from typing import Any, Dict | |
import ddtrace | |
from ddtrace import tracer | |
def datadog_context( | |
logger: logging.Logger, log_method: Any, event_dict: Dict[Any, Any] | |
) -> Dict[Any, Any]: | |
# ... | |
# Add datadog information | |
span = tracer.current_span() | |
trace_id, span_id = (span.trace_id, span.span_id) if span else (None, None) | |
event_dict["dd.trace_id"] = str(trace_id or 0) | |
event_dict["dd.span_id"] = str(span_id or 0) | |
event_dict["dd.env"] = ddtrace.config.env or "" | |
event_dict["dd.service"] = ddtrace.config.service or "" | |
event_dict["dd.version"] = ddtrace.config.version or "" | |
return event_dict |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ... usual django stuff | |
import structlog | |
from ddtrace import config as ddtrace_config | |
from ddtrace import filters, tracer | |
from django_structlog.processors import inject_context_dict | |
from .extra_logging import datadog_context | |
# ... | |
# structlog chain | |
process_base = [ | |
structlog.processors.TimeStamper(fmt="iso"), | |
structlog.stdlib.add_logger_name, | |
structlog.stdlib.add_log_level, | |
structlog.stdlib.PositionalArgumentsFormatter(), | |
structlog.processors.StackInfoRenderer(), | |
structlog.processors.format_exc_info, | |
structlog.processors.UnicodeDecoder(), | |
datadog_context, | |
] | |
process_foreign_pre_chain = [inject_context_dict] + process_base | |
process_structlog = ( | |
[structlog.stdlib.filter_by_level] | |
+ process_base | |
+ [structlog.stdlib.ProcessorFormatter.wrap_for_formatter] | |
) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment