nodejs中是否有任何方式以JSON格式打印log4js输出?

时间:2016-03-21 12:36:49

标签: javascript node.js log4js-node

我正在尝试以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","时间" :" 2016-03-21T12:19:44.4444 + 00:00"," message" :"请求中的数据:","数据" :" {     "行动":" XXXXXXX",     "用户":{         "用户名":" XXXX",          " ID" :XXXX,         " pos :: XXXX     },     "版本":111     }" }

可能是我在配置中遗漏了一些东西。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

现在有两种方法可以解决此问题,您可以add your own layoutspattern 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');

答案 1 :(得分:0)

我们可以将bunyan用于以JSON格式记录您的控制台日志的相同目的。 以下是节点的{n}链接:https://www.npmjs.com/package/bunyan

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

感谢。