pino-pretty
pino-pretty copied to clipboard
hideObject isn't displaying errors
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.
It seems correct, that's what hideObject does. Why do you think it's a bug?
From the docs
'--hideObject (-H): Hide objects from output (but not error object)'
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?
I've updated this with example stack traces
Please provide a minimal reproduction script.
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();
command to run it
node pino-compare | pino-pretty --hideObject --t
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