Winston — добавить данные журнала в массив JSON

#node.js #json #formatting #winston

#node.js #json #форматирование #winston

Вопрос:

Я использую Winston для ведения журнала следующим образом:

 const logger = createLogger({
format: format.json(),
transports: [
    new transports.File({
        level: 'error',
        format: format.combine(filterOnly('error'),
            format.timestamp({
                format: 'YYYY-MM-DD HH:mm:ss'
            }),
            format.json()),
        filename: './audit_log/error.json',
    })]
});
  

Я бы хотел, чтобы мои данные журнала заканчивались в файле JSON со структурой, подобной этой:

 {
"log": [
    {
        "message": "",
        "level": "",
        "timestamp": ""
    },
    {
        "message": "",
        "level": "",
        "timestamp": ""
    }
  

Вместо:

 {"message":"Bundle uploaded file","level":"error","timestamp":"2019-02- 
28T07:48:59.821Z"}
  

Ответ №1:

Регистратор записывает записи в файл по ходу работы, как он будет закрывать файл для каждого оператора? При желании вы можете легко отформатировать стандартный файл в соответствующий объект json в любой момент:

 const readline = require('readline').createInterface({
  input: require('fs').createReadStream('logfile')
})

const log = []
readline.on('line', line => log.push(JSON.parse(line)))
  

Вы можете легко сделать что-то подобное с помощью bash