nrlogrusplugin

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 7, 2021 License: Apache-2.0 Imports: 8 Imported by: 16

README

v3/integrations/logcontext/nrlogrusplugin GoDoc

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

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

For more information, see godocs.

Documentation

Overview

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

Use this package if you already send your logs to New Relic and want to enable linking between your APM events and traces with your logs.

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/v3/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:

app, err := newrelic.NewApplication(
	newrelic.ConfigAppName("Logs in Context"),
	newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")),
	newrelic.ConfigDistributedTracerEnabled(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

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ContextFormatter

type ContextFormatter struct{}

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

func (ContextFormatter) Format

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

Format renders a single log entry.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL