2

我对 Node.js Bunyan 日志记录有一些疑问。我对bunyan伐木有点新,所以如果我问任何外行问题,请道歉。

我正在尝试以 json 格式流式传输 bunyan 日志输出。主要在一个文件中,我计划将它流式传输到远程主机。

这是我正在尝试的简单代码:

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. 将“级别”:30 更改为“级别”:“信息”
  3. 更改时间json对象的格式
  4. 添加额外的 json 对象,例如:"attr4": "value"
  5. time有什么方法可以更改默认的 json 对象名称,例如timestamp

我找不到任何简单或清晰的示例来进行上述任何更改。谁能给我一些例子吗?不需要将所有要点放在一起,但至少是一个良好的开端或任何有用的文档。

4

2 回答 2

1

查看 Banyan API 文档。涵盖了您的所有用例。

  1. 覆盖主机名或设置所需的主机名

在构建记录器时可配置

  1. 将“级别”:30 更改为“级别”:“信息”
  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.log(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)"
}
于 2018-05-07T20:41:29.840 回答
0

这是来自秘鲁的艾萨克。

只有您应该在属性 log.fields.“here your property”中添加一个字段。如果你想改变时间格式,你应该像这样改变时间属性:

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}

尝试一下并通过您的测试取得成功。

于 2021-02-17T23:12:54.700 回答