配置AjaxAppender请求Log4Javascript的数据

时间:2017-02-24 18:53:10

标签: javascript couchdb log4javascript

我对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中是否有办法当文档被POST时,我可以拦截并更改请求有效载荷并继续,所以它删除了数组(我假设它不喜欢)?

感谢。

1 个答案:

答案 0 :(得分:0)

我找到了答案。

JsonLayout包含名为batchHeaderbatchFooter的属性,但这两个是我的罪魁祸首。

无论出于何种原因,即使我没有进行批量日志发送,它仍然包含它们,所以我删除了它们,如下所示:

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

这解决了我的问题,我成功将日志发布到CouchDB。

希望这有助于其他人。