@naturalcycles/google-cloud-logging-winston

0.6.6 • Public • Published

@google-cloud/logging-winston

Stackdriver Logging transport for Winston

This module provides an easy to use, higher-level layer for working with Stackdriver Logging, compatible with Winston. Simply attach this as a transport to your existing Winston loggers.

For lower-level access to the Stackdriver Logging API, see @google-cloud/logging.

Beta This is a Beta release of the Stackdriver Logging libraries for Node.js. These libraries might be changed in backward-incompatible ways and are not subject to any SLA or deprecation policy.

$ npm install --save @google-cloud/logging-winston
var winston = require('winston');
var transport = require('@google-cloud/logging-winston');

winston.add(transport, {
  projectId: 'grape-spaceship-123',
  keyFilename: '/path/to/keyfile.json',
  level: 'warn' // log at 'warn' and above
});

winston.error('warp nacelles offline');
winston.verbose('sheilds at 99%');

Authentication

It's incredibly easy to get authenticated and start using Google's APIs. You can set your credentials on a global basis as well as on a per-API basis. See each individual API section below to see how you can auth on a per-API-basis. This is useful if you want to use different accounts for different Cloud services.

On Google Cloud Platform

If you are running this client on Google Cloud Platform, we handle authentication for you with no configuration. You just need to make sure that when you set up the GCE instance, you add the correct scopes for the APIs you want to access.

var winston = require('winston');
var transport = require('@google-cloud/logging-winston');

winston.add(transport);

// ...you're good to go!

Elsewhere

If you are not running this client on Google Cloud Platform, you need a Google Developers service account. To create a service account:

  1. Visit the Google Developers Console.
  2. Create a new project or click on an existing project.
  3. Navigate to APIs & auth > APIs section and turn on the following APIs (you may need to enable billing in order to use these services):
  • Stackdriver Logging API
  1. Navigate to APIs & auth > Credentials and then:
  • If you want to use a new service account key, click on Create credentials and select Service account key. After the account key is created, you will be prompted to download the JSON key file that the library uses to authenticate your requests.
  • If you want to generate a new service account key for an existing service account, click on Generate new JSON key and download the JSON key file.
var winston = require('winston');
var transport = require('@google-cloud/logging-winston');

winston.add(transport, {
  projectId: 'grape-spaceship-123',

  // The path to your key file:
  keyFilename: '/path/to/keyfile.json'

  // Or the contents of the key file:
  credentials: require('./path/to/keyfile.json')
});

// ...you're good to go!

Error Reporting

Any Error objects you log at severity error or higher can automatically be picked up by Stackdriver Error Reporting if your application is running on Google Cloud Platform. Make sure to add logs to your uncaught exception and unhandled rejection handlers if you want to see those errors too.

You may also want to see the @google-cloud/error-reporting module which provides direct access to the Error Reporting API.

Formatting Request Logs

To format your request logs you can provide a httpRequest property as part of the log metadata you provide to winston. We will treat this as the HttpRequest message and Stackdriver logging will show this as a request log. Example:

Request Log Example

winston.info(`${req.url} endpoint hit`, {
  httpRequest: {
    status: res.statusCode,
    requestUrl: req.url,
    requestMethod: req.method,
    remoteIp: req.connection.remoteAddress,
    // etc.
  }
});

The httpRequest proprety must be a properly formatted HttpRequest message.

Correlating Logs with Traces

If you use @google-cloud/trace-agent module, then this module will set the Stackdriver Logging LogEntry trace property based on the current trace context when available. That correlation allows you to view log entries inline with trace spans in the Stackdriver Trace Viewer. Example:

Logs in Trace Example

If you wish to set the LogEntry trace property with a custom value, then set a winston metadata property for 'logging.googleapis.com/trace', which is exported by this module as LOGGING_TRACE_KEY. For example:

const winston = require('winston');
const transport = require('@google-cloud/logging-winston');

...

winston.info('Log entry with custom trace value', {
  [transport.LOGGING_TRACE_KEY]: 'custom-trace-value'
});

Package Sidebar

Install

npm i @naturalcycles/google-cloud-logging-winston

Weekly Downloads

0

Version

0.6.6

License

Apache-2.0

Last publish

Collaborators

  • kirillgroshkov
  • kribor