Skip to content

Handle Rejections functionality is not working #1673

@betalb

Description

@betalb
  • winston version?
    • winston@2
    • winston@3
  • node -v outputs: v10.16.0
  • Operating System? macOS
  • Language? ES6/7

What is the problem?

In both below cases nodejs will print default unhandled rejection error

  1. setting handleRejections flag to true during transport creation is not working
  2. calling logger.rejections.handle(transport) is not working

What do you expect to happen instead?

Winston should intercept unhandled rejection and log it

Other information

1st problem is due to not released change in winston-transport package: winstonjs/winston-transport#47
2nd problem is due to typo in _addHandler method of lib/winston/rejection-handler.js:

handler.handleExceptions = true;

This line should be ADDED handler.handleRejections = true

There is one important thing: without handleExceptions, handleRejections won't log anything, due to below check: https://github.com/winstonjs/winston-transport/blob/46db8f3c8cd8b106ade8d7e04a191ee388683d60/index.js#L70

Testcases

Fails

const { createLogger, transports } = require('winston');

const logger = createLogger({
  transports: new transports.Console({
    level: 'info',
    handleRejections: true,
  }),
});

logger.info('Start');

new Promise((resolve, reject) => {
  process.nextTick(() => {
    reject(new Error('Rejected'));
  });
}).then(() => {});

Succeeds (Trick is in using Object.assign on transport instance)

const { createLogger, transports } = require('winston');

const logger = createLogger({
  transports: Object.assign(
    new transports.Console({
      handleExceptions: true,
    }),
    {
      handleRejections: true,
    },
  ),
});

logger.info('Start');

new Promise((resolve, reject) => {
  process.nextTick(() => {
    reject(new Error('Rejected'));
  });
}).then(() => {});

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions