Bunny logger.info错误在Restful API
我正在开发一个Restful API,我正在用bunyanlogging所有重要的步骤,包括请求。 我遇到了两个与日志logging有关的问题:我的第一个问题是,当我login它们时,所有的对象,而不是像独立对象一样出现在msg
字段中,就像string一样。
这里是我的代码来logging请求:
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 }
所以我的问题是, “味精”领域,我想看到“ID”和“方法”像其他领域而不是一个string。 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}
而且,我不能再用同一行中的那些对象来工作,也难以用这种方式来阅读和保存。
任何人都知道为什么会这样呢?
我的第一个问题是,当我login它们时,所有的对象,而不是像独立的对象出现,出现在“味精”字段,就像string。
那是因为你传递了不止一个对象。 您只能传递一个对象作为logging的第一个参数,所有其他参数将被视为msg
。 来自bunyan的源代码 :
/** * 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. Eg: * * log.info() * .... */
所以如果你将所有的parameter passing给一个对象,它将会正常工作:
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样式回车的文本编辑器(例如记事本++或崇高文本)。