3

我受到网络服务的限制:它需要一个 json-payload!

所以,做类似的事情

var ajaxAppender = new log4javascript.AjaxAppender("clientLogger");
var jsonLayout = new log4javascript.JsonLayout();
ajaxAppender.setLayout(jsonLayout);
log.addAppender(ajaxAppender);

不起作用,因为它在表单集合(datalayout)中创建了两个键。

如何使用内置选项获取 json-payload?

4

2 回答 2

5

我创建了一个JsonAppender

function JsonAppender(url) {
    var isSupported = true;
    var successCallback = function(data, textStatus, jqXHR) { return; };
    if (!url) {
        isSupported = false;
    }
    this.setSuccessCallback = function(successCallbackParam) {
        successCallback = successCallbackParam;
    };
    this.append = function (loggingEvent) {
        if (!isSupported) {
            return;
        }
        $.post(url, {
            'logger': loggingEvent.logger.name,
            'timestamp': loggingEvent.timeStampInMilliseconds,
            'level': loggingEvent.level.name,
            'url': window.location.href,
            'message': loggingEvent.getCombinedMessages(),
            'exception': loggingEvent.getThrowableStrRep()
        }, successCallback, 'json');
    };
}

JsonAppender.prototype = new log4javascript.Appender();
JsonAppender.prototype.toString = function() {
    return 'JsonAppender';
};
log4javascript.JsonAppender = JsonAppender;

像这样使用

var logger = log4javascript.getLogger('clientLogger');
var jsonAppender = new JsonAppender(url);
logger.addAppender(jsonAppender);
于 2012-08-21T04:37:45.217 回答
0

根据 log4javascript 的更改日志,在 1.4.5 版本中,如果 Log4Javascript 发送的详细信息足够,则不再需要编写自定义 appender。

1.4.5 (20/2/2013) - 更改 AjaxAppender 以在 content-type 不是“application/x-www-form-urlencoded”时发送原始数据而不是 URL 编码的表单数据 https://github.com/DECK36 /log4javascript/blob/master/changelog.txt

只需将“Content-Type”标头添加到 AjaxAppender 并将其设置为“application/json”就足够了

ajaxAppender.addHeader("Content-Type", "application/json;charset=utf-8");

使用 fiddler 进行的快速测试显示 log4javascipt 发送了一个对象集合。这是有效载荷的示例:

[{
    "logger": "myLogger",
    "timestamp": 1441881152618,
    "level": "DEBUG",
    "url": "http://localhost:5117/Test.Html",
    "message": "Testing message"
}]
于 2015-09-10T10:42:46.447 回答