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样式回车的文本编辑器(例如记事本++或崇高文本)。