@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'
});
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);
Elsewhere
If you are not running this client on Google Cloud Platform, you need a Google Developers service account. To create a service account:
- Visit the Google Developers Console.
- Create a new project or click on an existing project.
- Navigate to APIs & auth > APIs section and turn on the following APIs (you may need to enable billing in order to use these services):
- 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',
keyFilename: '/path/to/keyfile.json'
credentials: require('./path/to/keyfile.json')
});
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:
winston.info(`${req.url} endpoint hit`, {
httpRequest: {
status: res.statusCode,
requestUrl: req.url,
requestMethod: req.method,
remoteIp: req.connection.remoteAddress,
}
});
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:
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'
});