go-agent: github.com/newrelic/go-agent/_integrations/logcontext/nrlogrusplugin Index | Files | Directories

package nrlogrusplugin

import "github.com/newrelic/go-agent/_integrations/logcontext/nrlogrusplugin"

Package nrlogrusplugin decorates logs for sending to the New Relic backend.

Use this package if you want to enable the New Relic logging product and see your log messages in the New Relic UI.

Since Logrus is completely api-compatible with the stdlib logger, you can replace your `"log"` imports with `log "github.com/sirupsen/logrus"` and follow the steps below to enable the logging product for use with the stdlib Go logger.

Using `logger.WithField` (https://godoc.org/github.com/sirupsen/logrus#Logger.WithField) and `logger.WithFields` (https://godoc.org/github.com/sirupsen/logrus#Logger.WithFields) is supported. However, if the field key collides with one of the keys used by the New Relic Formatter, the value will be overwritten. Reserved keys are those found in the `logcontext` package (https://godoc.org/github.com/newrelic/go-agent/_integrations/logcontext/#pkg-constants).

Supported types for `logger.WithField` and `logger.WithFields` field values are numbers, booleans, strings, and errors. Func types are dropped and all other types are converted to strings.

Requires v1.4.0 of the Logrus package or newer.

Configuration

For the best linking experience be sure to enable Distributed Tracing:

cfg := NewConfig("Example Application", "__YOUR_NEW_RELIC_LICENSE_KEY__")
cfg.DistributedTracer.Enabled = true

To enable log decoration, set your log's formatter to the `nrlogrusplugin.ContextFormatter`

logger := log.New()
logger.SetFormatter(nrlogrusplugin.ContextFormatter{})

or if you are using the logrus standard logger

log.SetFormatter(nrlogrusplugin.ContextFormatter{})

The logger will now look for a newrelic.Transaction inside its context and decorate logs accordingly. Therefore, the Transaction must be added to the context and passed to the logger. For example, this logging call

logger.Info("Hello New Relic!")

must be transformed to include the context, such as:

ctx := newrelic.NewContext(context.Background(), txn)
logger.WithContext(ctx).Info("Hello New Relic!")

Troubleshooting

When properly configured, your log statements will be in JSON format with one message per line:

{"message":"Hello New Relic!","log.level":"info","trace.id":"469a04f6c1278593","span.id":"9f365c71f0f04a98","entity.type":"SERVICE","entity.guid":"MTE3ODUwMHxBUE18QVBQTElDQVRJT058Mjc3MDU2Njc1","hostname":"my.hostname","timestamp":1568917432034,"entity.name":"Example Application"}

If the `trace.id` key is missing, be sure that Distributed Tracing is enabled and that the Transaction context has been added to the logger using `WithContext` (https://godoc.org/github.com/sirupsen/logrus#Logger.WithContext).

Index

Package Files

nrlogrusplugin.go

type ContextFormatter Uses

type ContextFormatter struct{}

ContextFormatter is a `logrus.Formatter` that will format logs for sending to New Relic.

func (ContextFormatter) Format Uses

func (f ContextFormatter) Format(e *logrus.Entry) ([]byte, error)

Format renders a single log entry.

Directories

PathSynopsis
example

Package nrlogrusplugin imports 8 packages (graph) and is imported by 1 packages. Updated 2019-09-26. Refresh now. Tools for package owners.