Closed shadz3rg closed 3 years ago
I don't think, we can fix it, because it's not handled by Winston:
const { createLogger, format, transports } = require("winston");
const { combine, timestamp, label, json } = format;
const logger = createLogger({
format: combine(
label({ label: "right meow!" }),
timestamp(),
json()
),
transports: [new transports.Console()]
});
logger.info("Something happened", { a: 5 }, { b: "John" });
@icebob i ended up with custom logger on top of Winston adapter and args processing via util.format other loggers do that under the hood, so i think it is OK solution https://github.com/trentm/node-bunyan/blob/0ff1ae29cc9e028c6c11cd6b60e3b90217b66a10/lib/bunyan.js#L982
/**
*
* @param {object} bindings
*/
getLogHandler(bindings) {
let level = bindings ? this.getLogLevel(bindings.mod) : null;
if (!level)
return null;
const levelIdx = BaseLogger.LEVELS.indexOf(level);
const logger = isFunction(this.opts.createLogger) ? this.opts.createLogger(level, bindings) : this.winston.child({ level, ...bindings });
return (type, args) => {
const typeIdx = BaseLogger.LEVELS.indexOf(type);
if (typeIdx > levelIdx) return;
const readableArgs = util.format(...args);
switch(type) {
case "info": return logger.info(readableArgs);
case "fatal":
case "error": return logger.error(readableArgs);
case "warn": return logger.warn(readableArgs);
case "debug": return logger.debug(readableArgs);
case "trace": return logger.log("silly", readableArgs);
default: {
/* istanbul ignore next*/
if (logger[type])
return logger[type](readableArgs);
/* istanbul ignore next*/
return logger.info(readableArgs);
}
}
};
}
another solution is inspired by nest-js, but it requires strict(ish) arguments for each log level https://github.com/gremo/nest-winston/blob/ab030cf1b0678f163f0e490589ba5152131fafe6/src/winston.classes.ts
Prerequisites
Please answer the following questions for yourself before submitting an issue.
Current Behavior
Winston logger adapter can't log payload w/ more than 2 items.
Expected Behavior
Full message payload should be logged.
Failure Information
Steps to Reproduce
Simulate any error.
Reproduce code snippet
Context
Notes
It seems what winston doesnt support arguments spread, atleast i can't find it in current version.
https://github.com/winstonjs/winston/blob/2625f60c5c85b8c4926c65e98a591f8b42e0db9a/lib/winston/logger.js#L179
https://github.com/moleculerjs/moleculer/blob/6e3e4d34ecbb951117ac240d6bcc5b3aab561a7f/src/loggers/winston.js#L71
With console.log(args) just before switch - output will be something like this:
As we can see obj with requestID is logged as meta arg, actual error is skipped. Cant really propose a quick solution here since im not really a JS-dev (or PhD in configuring winston 😀).