【问题标题】:How to add custom JSON objects in Node.js Bunyan Logging?如何在 Node.js Bunyan Logging 中添加自定义 JSON 对象?
【发布时间】:2018-10-17 16:05:19
【问题描述】:

我有几个关于 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

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

【问题讨论】:

    标签: json node.js logging bunyan


    【解决方案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)"
    }
    

    【讨论】:

    • 我浏览了这个文档:npmjs.com/package/bunyan,但还没有弄清楚如何在流式传输 json 输出时执行任何这些操作
    【解决方案2】:

    这是来自秘鲁的艾萨克。

    只有你应该在属性 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}
    

    试一试,测试成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多