【问题标题】:Bunyan logger.info error in Restful APIRestful API 中的 Bunyan logger.info 错误
【发布时间】:2015-04-08 22:20:06
【问题描述】:

我正在开发一个 Restful API,我正在使用 bunyan 记录所有重要步骤,包括请求。我在记录时遇到两个问题: 我的第一个问题是,当我记录它们时,我的所有对象,而不是像独立对象一样出现在msg 字段中,就像字符串一样。

这是我记录请求的代码:

var logger = bunyan.createLogger({
    name: 'main', 
    streams: [{ 
        level: 'info', 
        path: './logs/requests.log'
    }]
});

logRequest = function(request){
    logger.info("Request started.", {id: request.id}, {method: request.method});
};

当我看到 request.log 文件时,它看起来像这样(我刚刚添加了一些标签以使其更舒适):

{
    "name": "logger",
    "hostname": "LLAS",
    "pid": 7700,
    "level": 30,
    "msg":"Request started. { id: '1428527975041:LLAS:7700:i898o4l5:10000'{ method:'post' } ",
    "time":"2015-04-08T21:19:35.055Z",
    "v":0
}

所以我的问题是 "msg" 字段,我想像其他字段一样查看“id”和“method”而不是字符串。 IE:

 {
        "name": "logger",
        "hostname": "LLAS",
        "pid": 7700,
        "level": 30,
        "msg":"Request started.",
        "id": '1428527975041:LLAS:7700:i898o4l5:10000',
        "method":  'post',
        "time":"2015-04-08T21:19:35.055Z",
        "v":0
 }

我该如何解决我的问题?

我的第二个问题是:当我在同一个文件中执行多个日志时,它会将 JSON 写入同一行,而不是新行,如下所示:

{"name":"logger",...,"v":0}{"name":"logger",...,"v":0}

而不是这个:

{"name":"logger",...,"v":0}
{"name":"logger",...,"v":0}

以后我不能在同一行中处理这些对象,而且很难以这种方式阅读和维护。

有人知道为什么会这样吗?

【问题讨论】:

    标签: node.js logging bunyan


    【解决方案1】:

    我的第一个问题是,当我记录它们时,我的所有对象,而不是 看起来像独立的对象,出现在“msg”字段中,比如 字符串。

    那是因为您传递的对象不止一个。您只能将一个对象作为记录的第一个参数传递,所有其他参数将被视为msg。来自bunyan source code:

    /**
     * The functions below log a record at a specific level.
     *
     * Usages:
     *    log.<level>()  -> boolean is-trace-enabled
     *    log.<level>(<Error> err, [<string> msg, ...])
     *    log.<level>(<string> msg, ...)
     *    log.<level>(<object> fields, <string> msg, ...)
     *
     * where <level> is the lowercase version of the log level. E.g.:
     *
     *    log.info()
     * ....
     */
    

    因此,如果您将所有参数传递到一个对象中,它将正常工作:

    var request = { id: "abc", method: "GET" }; // dummy request object
    logger.info({id: request.id, method: request.method}, "Request started.");
    

    结果是(打印得很漂亮):

    {
      "name": "main",
      "hostname": "Victors-MacBook-Pro.local",
      "pid": 2848,
      "level": 30,
      "id": "abc",
      "method": "GET",
      "msg": "Request started.",
      "time": "2015-04-08T23:25:37.967Z",
      "v": 0
    }
    

    我的第二个问题是:当我做多个登录时 文件,它将 JSON 写入同一行,而不是新行。

    你在 Windows 上吗?如果是这样,问题可能在于 bunyan 可能使用的是 UNIX 样式的回车符 (\n) 而不是 Windows 样式的 (\r\n)。尝试使用支持 UNIX 样式回车的文本编辑器(例如 notepad++ 或 sublime text)。

    【讨论】:

    • 我暂时使用Windows,但我会在崇高的情况下尝试,感谢您的解释!它对我有用。
    猜你喜欢
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多