pino-pretty icon indicating copy to clipboard operation
pino-pretty copied to clipboard

hideObject isn't displaying errors

Open RichardWright opened this issue 2 years ago • 8 comments

When running pino-pretty with --hideObject, certain error log usages won't display the stack.

failing example:

logger.error({ err, msg: 'test fail' });

[2021-07-27 20:36:01.671 +0000] ERROR (18750 on GB-UXS-TEST): unhandledRejection

This just displays the error message (test fail in this case)

working example:

logger.error(err ? err : {}, 'test fail 2');

[2021-07-27 20:36:01.671 +0000] ERROR (18750 on GB-UXS-TEST): unhandledRejection
    Error: Resource not yet loaded!
        at SomeResource (/Users/Wrig83592/projects/test/src/index.ts:20:25)
        at Object.<anonymous> (/Users/Wrig83592/projects/test/src/index.ts:51:20)
        at Module._compile (internal/modules/cjs/loader.js:1063:30)
        at Module._compile (/Users/Wrig83592/projects/test/node_modules/source-map-support/source-map-support.js:547:25)
        at Module.m._compile (/private/var/folders/tw/w31mt8qj14q3lyq1bqpf85bc0000gp/T/ts-node-dev-hook-10219982870510425.js:69:33)
        at Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
        at require.extensions..jsx.require.extensions..js (/private/var/folders/tw/w31mt8qj14q3lyq1bqpf85bc0000gp/T/ts-node-dev-hook-10219982870510425.js:114:20)
        at require.extensions.<computed> (/private/var/folders/tw/w31mt8qj14q3lyq1bqpf85bc0000gp/T/ts-node-dev-hook-10219982870510425.js:71:20)
        at Object.nodeDevHook [as .ts] (/Users/Wrig83592/projects/test/node_modules/ts-node-dev/lib/hook.js:63:13)
        at Module.load (internal/modules/cjs/loader.js:928:32)

This will display the message and stack.

RichardWright avatar Jul 27 '21 20:07 RichardWright

It seems correct, that's what hideObject does. Why do you think it's a bug?

mcollina avatar Jul 27 '21 20:07 mcollina

From the docs

'--hideObject (-H): Hide objects from output (but not error object)'

RichardWright avatar Jul 27 '21 20:07 RichardWright

I also should clarify the difference between logger.error(err, msg) and logger.error({ err, msg })

Beyond the obvious aspects. Don't they both log an error?

RichardWright avatar Jul 27 '21 20:07 RichardWright

I've updated this with example stack traces

RichardWright avatar Jul 27 '21 20:07 RichardWright

Please provide a minimal reproduction script.

jsumners avatar Jul 27 '21 21:07 jsumners

script here:

import pino from 'pino';

const logger = pino();

function SomeResource() {
  return Promise.reject(new Error('Resource not yet loaded!'));
}

process.on('unhandledRejection', (err) => {
  logger.error({ err, msg: 'test fail1' });
  logger.error(err ? err : {}, 'test fail2');
});

SomeResource();

RichardWright avatar Jul 28 '21 17:07 RichardWright

command to run it

node pino-compare | pino-pretty --hideObject --t

RichardWright avatar Jul 29 '21 08:07 RichardWright

I noticed as well,

i found that the problem is here https://github.com/pinojs/pino-pretty/blob/68f22d4548297dcb83b7d675dd56c5f2cd5df7ac/index.js#L189-L199

it can be resolved with following code

if (log.err && log.err.type === 'Error' && log.err.stack) { 

tried to fix it in a fork but lot of test were failing unfortunately

nielswijers avatar Aug 03 '22 21:08 nielswijers