zayquan zayquan - 1 month ago 18
Node.js Question

How do I change my node winston JSON output to be single line

When I create a nodejs winston console logger and set

json:true
, it always output JSON logs in multiline format. If I pipe these to a file and try to grep that file, my grep hits only include part of the log line. I want winston to output my log lines in JSON format, but not to pretty print the JSON

Here is my config (coffeescript, apologies):

winston = require 'winston'
logger = new (winston.Logger)(
transports: [
new winston.transports.Console({
json: true
})
]
)


And some sample output:

{
"name": "User4",
"level": "info",
"message": "multi line whyyyyy"
}

Answer

The winston transports provide a way to override the stringify method, so by modifying the config above I got single line JSON output.

New config:

winston = require('winston')
logger = new (winston.Logger)({
  transports: [
    new winston.transports.Console({
     json: true,
     stringify: (obj) => JSON.stringify(obj)
    })
  ]
})
Comments