Sentry transport for the winston logger.


Follow this sample configuration to use:

var winston = require('winston'),
    Mail = require('winston-mail').Mail,
    Sentry = require('winston-sentry');
var logger = new winston.Logger({
    transports: [
        new winston.transports.Console({level: 'silly'}),
        new Sentry({
                level: 'warn',
                dsn: "{{ YOUR SENTRY DSN }}"

If you want to use patchGlobal to catch all uncaught errors, simply pass it as option like this:

new Sentry({
    patchGlobal: true

Winston logging levels are mapped to the default sentry levels like this:

silly: 'debug',
verbose: 'debug',
info: 'info',
debug: 'debug',
warn: 'warning',
error: 'error',


  • Added support for global tags that will be added to every message sent to sentry
new Sentry({
    globalTags: { foo: "bar" }
* Upgrade Raven client to version 0.8.1
* Error stack traces will be sent to sentry. See [#3]( for more details. 
* Upgrade raven to latest version (0.6.3)
* Raven client can be passed to the transport from the outside
 * Winston metadata will be populated into the "Additional Data" section in Sentry.
 * If metadata contains a `tags` property, any key/value pairs within that property will be populated as Sentry tags.
   *It will be removed from the "Additional Data" section to avoid data duplication.* This will allow Winston metadata
   to be filterable within the Sentry UI.
logger = new winston.Logger(...);
logger.log("info", "my log message", {
      userInformation: {
         os: "linux",
         browser: "chrome",
         userAgent: "<user agent string>"
      tags: {
         productVersion: "1.2"
// In Sentry, the "Additional Data" section would show:
// - userInformation
//      - os: linux
//      - browser: chrome
//      - userAgent: <user agent string>
// The tags would show:
// - level: info
// - logger: [logger property from transport constructor - defaults to "root"]
// - server_name: [machine name]
// - productVersion: 1.2


  • Added support for capturing "Additional Data".


logger = new winston.Logger(...);
logger.sentry_client.captureQuery("SELECT * FROM users;");
  • when logging as error level, it will implicitly call raven's captureError which will also capture the stack trace.
  • the winston.Logger object exposes the sentry client as sentry_client. Usage is simple:

** TODO:

  • capture sentry identifiers?