nodejs 有没有办法以 JSON 格式打印 log4js 输出?

Is there any way in nodejs to print log4js output in JSON format?

我正在尝试以 JSON 格式获取 log4js 的输出,以便我可以轻松地跟踪它。 有什么方法我们必须在 configuration.json 中设置,以便 log4js 产生的输出将采用 JSON 格式?

目前我正在使用以下配置。

{
 "appenders": [
{
  "category": "XXXXX",
  "type": "dateFile",
  "filename": "XXXXXXXX",
  "pattern": "-from-MM-dd",
  "layout": {
    "type": "messagePassThrough"
  }
},
{
  "category": "XXXXXXXXX",
  "type": "dateFile",
  "filename": "XXXXXXXX",
  "pattern": "-from-MM-dd",
  "layout": {
    "type": "messagePassThrough"
  }
}
 ],
"levels": {
"XXXXConfig":  "INFO",
"XXXXXjectConfig" : "INFO"
 }
}

我得到的输出格式如下:

DEBUG:  1458562784032 : 2016-03-21T12:19:44.4444+00:00 : Data in request: : {
"action": "XXXXXXX",
"user": {
    "username": "XXXX",
     "id" : XXXX,
    "pos" : XXXX
},
"version": 111
}

相反,我想要它(类似于以下结构):

{"id":“1458562784032”,"time":“2016-03-21T12:19:44.4444+00:00”,"message":"Data in request:", "data":“{ "action": "XXXXXXX", "user":{ "username": "XXXX", "id":XXXX, “位置::XXXX }, "version": 111 }" }

可能是我在配置中遗漏了什么。

感谢您的帮助。

我们可以将 bunyan 用于相同的目的,它以 JSON 格式记录您的控制台日志。 这是节点的 npm link:https://www.npmjs.com/package/bunyan.

此外,即使您想使用 log4js,也可以创建自己的模式并将日志文件写入 JSON 格式。

谢谢。

现在有两种方法可以实现这个问题,你可以add your own layouts or pattern format

下面是使用JSON格式添加您自己的布局的示例代码

const log4js = require('log4js');

log4js.addLayout('json', function(config) {
  return function(logEvent) { return JSON.stringify(logEvent) + config.separator; }
});

log4js.configure({
  appenders: {
    out: { type: 'stdout', layout: { type: 'json', separator: ',' } }
  },
  categories: {
    default: { appenders: ['out'], level: 'info' }
  }
});

const logger = log4js.getLogger('json-test');
logger.info('this is just a test');