Как добавить пользовательские объекты JSON в Node.js Bunyan Logging?

У меня есть несколько вопросов о ведении журнала Bunyan в Node.js. Я вроде как новичок в ведении журнала bunyan, поэтому прошу прощения, если я задам какие-либо вопросы непрофессионалам.

Я пытаюсь передать вывод журнала bunyan в формате json. В основном в файле, и я планирую передать его на удаленный хост.

Вот простой код, который я пробую:

var bunyan = require("bunyan");

var logger = bunyan.createLogger({
  name: "testApp",
  streams: [
    {
      path: "bunayan.log"
    }
  ],
  src: true
});

logger.info("Data sent to file");

Результат:

{"name":"testApp","hostname":"xxx.xxx.com","pid":14124,"level":30,"msg":"Data sent to file","time":"2018-05-07T19:14:15.866Z","src":{"file":"/path/to/file/banyan_test.js","line":11},"v":0}

Итак, я пытаюсь отформатировать вывод следующим образом:

  1. Переопределите имя хоста или установите желаемое имя хоста
  2. Измените "level": 30 на "level": "info"
  3. Изменить формат объекта времени json
  4. Добавьте дополнительный объект json, например: "attr4": "value"
  5. Есть ли способ изменить имя объекта json по умолчанию, например time, на timestamp

Я не смог найти ни одного простого или ясного примера внесения любого из вышеперечисленных изменений. Кто-нибудь может показать мне несколько примеров для начала? Необязательно сводить все вместе, но, по крайней мере, нужно начинать работу или какую-либо полезную документацию.

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
2
0
2 530
2

Ответы 2

Ознакомьтесь с документацией по API Banyan. Охвачены все ваши варианты использования.

  1. Переопределите имя хоста или установите желаемое имя хоста

Настраивается при построении регистратора

  1. Измените "level": 30 на "level": "info"
  2. Изменить формат объекта времени json
  3. Добавьте дополнительный объект json, например: "attr4": "value"
  4. Есть ли способ изменить имя объекта json по умолчанию, например время на метку времени

Вы можете переопределить объект json: См. Это: https://github.com/trentm/node-bunyan/issues/194

var bunyan = require('bunyan');

function modifiedStream(filePath) {
  return {
    write: log => {
      log.level = bunyan.nameFromLevel[log.level];
      log.time = new Date().valueOf();
      log._timeStamp = new Date().toISOString();
      log.myProp = "Some Value" + new Date();

      var logLine = JSON.stringify(log, bunyan.safeCycles(), 2);
      console.info(logLine);
    }
  };
}

var logger = bunyan.createLogger({
  name: 'myapp',
  hostname: "My Test Mac",
  streams: [{
    type: 'raw',
    stream: modifiedStream()
  }]
});

logger.info("Hello");

logger.info({
  customProp1: "AAA",
  customProp2: "BBB"
});

Выход:

{
  "name": "myapp",
  "hostname": "My Test Mac",
  "pid": 89297,
  "level": "info",
  "msg": "Hello",
  "time": 1525813632657,
  "v": 0,
  "_timeStamp": "2018-05-08T21:07:12.657Z",
  "myProp": "Some ValueWed May 09 2018 02:37:12 GMT+0530 (IST)"
}
{
  "name": "myapp",
  "hostname": "My Test Mac",
  "pid": 89297,
  "level": "info",
  "customProp1": "AAA",
  "customProp2": "BBB",
  "msg": "",
  "time": 1525813632659,
  "v": 0,
  "_timeStamp": "2018-05-08T21:07:12.659Z",
  "myProp": "Some ValueWed May 09 2018 02:37:12 GMT+0530 (IST)"
}

Я просмотрел этот документ: npmjs.com/package/bunyan, но не понял, как это сделать при потоковой передаче вывода json

saz 08.05.2018 20:06

Это Исаак из Перу.

Только вы должны добавить в свойство log.fields поле «вот ваша собственность». Если вы хотите изменить формат времени, вы должны изменить атрибут времени следующим образом:

log.fields.time = moment(new Date()).format("YYYY-MM-DD HH:mm:ss");

Настраиваемое свойство, например:

log.fields.hola = "hola";

Добавляйте только «момент» npm в заголовок вашего класса.

Это пример кода моего класса logger.js.

const bunyan = require('bunyan');
const moment = require('moment');
function info(paramLog){
  let log = bunyan.createLogger({
    name: 'MyLoggerName',
    streams:[
                {
                    level:'info',
                    stream: process.stdout
                }
            ]
        
   });
   log.fields.time = moment(new Date()).format("YYYY-MM-DD HH:mm:ss");
   if (paramLog && paramLog !== undefined && paramLog !==null){
     log.info(JSON.stringify(paramLog));
   }

}

module.exports = {
 info
}

Результат такой:

{"name":"MyLoggerName","hostname":"USER10","pid":14880,"time":"2021-02-17 18:04:03","level":30,"msg":"\"---end update\"","v":0}

Попробуйте и успешно с тестом.

Другие вопросы по теме