New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
In 3.0.0 I cannot log objects without using JSON.stringify #1217
Comments
+1 |
@eyp can you try this?
The underlying source is here: https://github.com/winstonjs/logform/blob/master/splat.js which you can see it use https://nodejs.org/api/util.html#util_util_format_format_args so |
works like a charm, I didn't know winston used the same formatting params than util.format. Thank you! |
winston 3.1.0 In code I use: logger.debug('%o', req.query) |
Generally %o is called by util.format() where you specify the object you want in there. From the output it looks like you don't even need %o because the object is being displayed. |
Just use this instead, logger.debug(req.query) and it should work. Or you can store it in a variable with util.format like this |
@frenzymind Or try the work around that was posted to the original issue by @mingchuno. |
@eponymz In this case there is: debug: [object Object] {"timestamp":"2018-10-30 11:14:04"}
It is works, but noisy. |
Is the output from the second what you were wanting? By that i mean, if you wanted the query in the logs, is it showing. If not try the workaround that was mentioned before that mingchuno posted. |
Yes, the second way works as I want. I see json object data. |
Yes, I'm seeing |
Is that a deliberate design choice? It deviates from the standard quite a bit (and took me a good hour to find) instead of
having to (winston 3.x) change all logging calls to
Sorry, am I right? I am confused... |
Seriously, this seems like a downgrade. With Winston 2, I could just replace all |
So the fix is to append the |
Yes! |
Couldn't accept that I have tot use %o always and made this simple solution:
So this logger....
...transforms to this in the console
Hope I can help you guys :D Just awful if we always had two use "%o" |
Nice one, but it's weird, do I need to do it for all my logger level? |
Just for information, it's better to use typeof info.message === 'object' instead of info.message.constructor === Object It avoid errors when message is null or undefined and arrays will be displayed properly |
winston-pretty will solve this issue in a robust and versatile way. It's a standalone program that takes winston json log as input and outputs human readable log lines. It also pretty prints json and errors.
https://www.npmjs.com/package/winston-pretty full-disclosure: I'm the author of winston-pretty |
I'm on version 3, but since I've upgraded the only way to log objects is by stringify first the object.
But with errors is even worse because I cannot log the error at all, I need to use error.message or directly the console.
This is my configuration for the development environment:
`` const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;
Doing this:
logger.error('Error sending contact message:', JSON.stringify(err));
I got only:
[mylabel] Error sending contact message:
But is a pain in the ass having to stringify everything, and doind that for errors. What am I doing wrong?, because in previous versions it was straightforward.
The text was updated successfully, but these errors were encountered: