2017-02-24 91 views
0

我对Log4Javascript和日志记录非常陌生,所以请耐心等待。配置AjaxAppender请求的数据Log4Javascript

我正在尝试将日志发布到CouchDB。我收到来自服务器的错误:

{"error":"bad_request","reason":"Document must be a JSON object"} 

好的很酷。所以它不是JSON对象,我可以修复它。

除了我无法弄清楚如何。

我使用的代码是:

var log = log4javascript.getLogger(); 

var ajaxAppender = new log4javascript.AjaxAppender(url); 
var layout = new log4javascript.JsonLayout(true, false); 
ajaxAppender.addHeader("Content-Type", "application/json"); 
ajaxAppender.setLayout(layout); 
log.addAppender(ajaxAppender); 

// Test the logger 
log.debug(JSON.stringify("Hello world!")); 

到处都找遍了说,这是把它作为一个JSON对象的方式,所以我想这是正确的。

当我看着请求负载,我认识到,CouchDB的服务器必须不喜欢被格式化的方式,就像这样:

[ 
{ 
    "logger": "[anonymous]", 
    "timestamp": 1487961971605, 
    "level": "DEBUG", 
    "url": "url.to.couchdb", 
    "message": "\"Hello world!\"" 
} 
] 

正如你可以看到,这是内部的JSON对象一个数组,我相信这是我的问题所在。

所以我的问题是:

  • 我错过了在建立AjaxAppenderJsonLayout的东西吗?
  • 有没有办法改变请求有效载荷的格式与log4javascript?
  • 如果没有,CouchDB中有一种方法,当文档被张贴时,我可以截取并更改请求有效载荷并继续,因此它将删除数组(我假设它不喜欢)?

谢谢。

回答

0

我找到了我的答案。

JsonLayout有属性称为batchHeaderbatchFooter等,但这两个是我的罪魁祸首。

无论出于何种原因,它仍包括他们即使我没有做批处理日志发送,所以我删除他们两个像这样:

... 
var layout = new log4javascript.JsonLayout(true, false); 
layout.batchHeader = ""; 
layout.batchFooter = ""; 
... 

这个固定我的问题,我成功发布日志CouchDB的。

希望这可以帮助别人。