Поэтому я использую winston.js для входа в файл.Я настроил регистратор для вывода JSON в стандартном формате JSON Уинстона.
Это моя конфигурация Logger.
logger.util.js:
'use strict';
const winston = require('winston');
const moment = require('moment');
const logger = winston.createLogger({
format: winston.format.json(),
transports: [
new winston.transports.File({
filename: './logs/' + moment(moment.now()).format('DD-MM-YYYY') + '-API.json',
handleExceptions: true
})
],
});
module.exports = logger;
При регистрации события, например, так:
logger.log({
'level': 'info',
'timestamp': moment.now(),
'account_id': res.account_id || null,
'action': JSON.stringify(payload),
'request_id': res.request_id,
'status': success.status.code,
'route' : res.method + ' ' + res.route,
'bytes': res.socket.bytesRead || null,
'elapsed': res.elapsed || null,
});
Я получаю следующий вывод в мой файл журнала
Вывод:
{
"level": "error",
"timestamp": 1544708669700,
"account_id": 7,
"action": "SequelizeDatabaseError: column \"alert\" does not exist",
"request_id": "27cc338b-3980-4818-a9e7-83380b1b2c3a",
"status": 500,
"route": "POST /post/new",
"bytes": 714,
"elapsed": 35
}
{
"level": "info",
"timestamp": 1544709322038,
"action": "{\"device\":{\"id\":57},\"removed\":55}",
"status": 200,
"route": "undefined undefined",
"bytes": 517,
"elapsed": null
}
Я хочу, чтобы журнал выводился в мой файл следующим образом.Таким образом, данные могут быть найдены позднее.
Требуемый вывод:
[
{
"level": "error",
"timestamp": 1544708669700,
"account_id": 7,
"action": "SequelizeDatabaseError: column \"alert\" does not exist",
"request_id": "27cc338b-3980-4818-a9e7-83380b1b2c3a",
"status": 500,
"route": "POST /post/new",
"bytes": 714,
"elapsed": 35
},
{
"level": "info",
"timestamp": 1544709322038,
"action": "{\"device\":{\"id\":57},\"removed\":55}",
"status": 200,
"route": "undefined undefined",
"bytes": 517,
"elapsed": null
}
]
Я понимаю, что может потребоваться создать пользовательский формат с Уинстоном, и подумал,кто-нибудь может дать мне пример?После моего исследования я не смог найти что-то достаточно похожее, чтобы отработать, и документы также не дают подобного примера.