To send your Go logs to Datadog, log to a file and then tail that file with your Datadog Agent. You can use the following setup with logrus, an open source logging library.
Datadog strongly encourages setting up your logging library to produce your logs in JSON to avoid the need for custom parsing rules.
For a classic Go configuration, open a main.go
file and paste in the following code:
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
// use JSONFormatter
log.SetFormatter(&log.JSONFormatter{})
// log an event as usual with logrus
log.WithFields(log.Fields{"string": "foo", "int": 1, "float": 1.1 }).Info("My first event from golang to stdout")
}
You can add metas to any log if you provide a JSON object that you want to see in the log event.
These metas can be hostname
, username
, customers
, metric
or any information that can help you troubleshoot and understand what happens in your Go application.
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
// use JSONFormatter
log.SetFormatter(&log.JSONFormatter{})
// log an event with logrus
log.WithFields(log.Fields{"string": "foo", "int": 1, "float": 1.1 }).Info("My first event from golang to stdout")
// for metadata, a common pattern is to reuse fields between logging statements by reusing
contextualizedLog := log.WithFields(log.Fields{
"hostname": "staging-1",
"appname": "foo-app",
"session": "1ce3f6v"
})
contextualizedLog.Info("Simple event with global metadata")
}
Once log collection is enabled, set up custom log collection to tail your log files and send new logs to Datadog.
Create a go.d/
folder in the conf.d/
Agent configuration directory.
Create a conf.yaml
file in go.d/
with the following content:
##Log section
logs:
- type: file
path: "<path_to_your_go_log>.log"
service: <service_name>
source: go
sourcecategory: sourcecode
Restart the Agent.
Run the Agent’s status subcommand and look for go
under the Checks
section to confirm logs are successfully submitted to Datadog.
If logs are in JSON format, Datadog automatically parses the log messages to extract log attributes. Use the Log Explorer to view and troubleshoot your logs.
Connect logs and traces
If APM is enabled for this application, the correlation between application logs and traces can be improved by following the APM Go logging documentation to automatically add trace and span IDs in your logs.
Best practices
- Name the logger with a name that corresponds to the relevant functionality or service.
- Use the
DEBUG
, INFO
, WARNING
, and FATAL
log levels. In Datadog, Go’s FATAL
maps to a severity level of Emergency
. - Start with logging the information that is most important. Expand the comprehensiveness of your logging with further iterations.
- Use metas to add context to any log. This enables you to quickly filter over users, customers, business-centric attributes, etc.
Further Reading
Additional helpful documentation, links, and articles: