Connecting Go Logs and Traces

Connecting Go Logs and Traces

Manually Inject Trace and Span IDs

The Go tracer API allows printing span information along with log statements using the %v format specifier:

package main

import (


func handler(w http.ResponseWriter, r *http.Request) {
    // Create a span for a web request at the /posts URL.
    span := tracer.StartSpan("web.request", tracer.ResourceName("/posts"))
    defer span.Finish()

    // Append span info to log messages:
    log.Printf("my log message %v", span)

The above example illustrates how to use the span’s context in the standard library’s log package. Similar logic may be applied to 3rd party packages too.

Note: If you are not using a Datadog Log Integration to parse your logs, custom log parsing rules need to ensure that dd.trace_id, dd.span_id, dd.service, dd.env and dd.version are being parsed as strings. More information can be found in the FAQ on this topic.

Further Reading