Bunyan logger.info Restful API 中的错误
Bunyan logger.info error in Restful API
我正在研究 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" 而不是字符串. I.E. :
{
"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}
而且我以后不能在同一行中处理这些对象,而且那样很难阅读和维护。
有人知道为什么会这样吗?
My first problem is that when I log them, all my objects, instead of
appearing like independent objects, appear in the "msg" field, like
strings.
那是因为您传递的对象不止一个。您只能传递一个对象作为记录的第一个参数,所有其他参数将被视为 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
}
And my second problem is: When I do more than one log in the same
file,it writes the JSON in the same line, instead of a new line.
你在Windows吗?如果你是,也许问题是 bunyan 可能使用 UNIX 风格的回车 return (\n
) 而不是 Windows 风格 (\r\n
)。尝试使用支持 UNIX 风格回车 returns 的文本编辑器(例如 notepad++ 或 sublime text)。
我正在研究 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" 而不是字符串. I.E. :
{
"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}
而且我以后不能在同一行中处理这些对象,而且那样很难阅读和维护。
有人知道为什么会这样吗?
My first problem is that when I log them, all my objects, instead of appearing like independent objects, appear in the "msg" field, like strings.
那是因为您传递的对象不止一个。您只能传递一个对象作为记录的第一个参数,所有其他参数将被视为 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
}
And my second problem is: When I do more than one log in the same file,it writes the JSON in the same line, instead of a new line.
你在Windows吗?如果你是,也许问题是 bunyan 可能使用 UNIX 风格的回车 return (\n
) 而不是 Windows 风格 (\r\n
)。尝试使用支持 UNIX 风格回车 returns 的文本编辑器(例如 notepad++ 或 sublime text)。