Connecting Go Logs and Traces
Manual injection
The Go tracer API allows printing span information along with log statements using the %v
format specifier:
package main
import (
"net/http"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)
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
Additional helpful documentation, links, and articles: