13 Aug 2023 02:22 PM - last edited on 14 Aug 2023 08:30 AM by MaciejNeumann
Hi,
I'd like to connect logs with traces and I'm on Log4J 1.x for a subcomponent that cannot be upgraded to Log4J 2.x. I see Dynatrace supports automatic log enrichment for Log4j 2.x but not for Log4J 1.x. I verified the logs and don't see dt.span_id, dt.trace_id, dt.trace_sampled and dt.entity.process_group_instance in the log files
How can I manually enrich the logs from log4j 1.x so that they are associated with a trace? I tried adding dt.span_id, dt.trace_id, dt.trace_sampled and dt.entity.process_group_instance using a log4j pattern layout like below but the log files have empty values for these variables.
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} dt.trace_id=%X{dt.trace_id} dt.span_id=%X{dt.span_id} dt.entity.process_group_instance=%X{dt.entity.process_group_instance} - %msg%n"/>
I suspect with Log4J 1.x these values are not set as MDC variables so the logs don't have them as well. How do I associate the logs from Log4J 1.x to traces?
Thanks
Solved! Go to Solution.
14 Aug 2023 05:41 AM
Hey Sanjivj,
While not ideal and not for log4j 1.x but just generally for logs not being automatically linked to traces, I do remember being able to set this up using OpenTelemetry as shown here: Connecting log data to traces | Dynatrace Docs
Another example in Lambda functions can be seen here: AWS Lambda logs in context of traces | Dynatrace Docs
Hope this helps get you in the right direction!
14 Aug 2023 06:12 AM
In general - there is no way of enriching the log entries for unsupported log frameworks without modifying the application code. The approach is to retrieve the trace context information using OpenTelemetry (or OneAgent SDK which can provide that in the latest versions of the SDK) and log it along with log entries from the application.