log4javascript - получить историю сообщений программно? - PullRequest
2 голосов
/ 03 апреля 2012

Я пытаюсь использовать в своем приложении каркас ведения журналов javascript.

Мне очень нравится внешний вид log4javascript (http://log4javascript.org/), но у меня есть одно требование, которое я не уверен, что оно удовлетворяет.

Мне нужно иметь возможность запрашивать структуру для всех сообщений, которые были зарегистрированы.

Возможно, я мог бы использовать невидимый InPageAppender (http://log4javascript.org/docs/manual.html#appenders), чтобы войти в элемент DOM, а затем очистить сообщения от этого элемента DOM - но это кажется довольно тяжелым.

Возможно, мне нужно написать свой собственный "InMemoryAppender"?

1 Ответ

3 голосов
/ 03 апреля 2012

В модульных тестах log4javascript используется ArrayAppender, в котором все полученные им сообщения журнала хранятся в массиве, доступном через его свойство logMessages. Надеюсь, это должно появиться в основном дистрибутиве в следующей версии. Вот отдельная реализация:

var ArrayAppender = function(layout) {
    if (layout) {
        this.setLayout(layout);
    }
    this.logMessages = [];
};

ArrayAppender.prototype = new log4javascript.Appender();

ArrayAppender.prototype.layout = new log4javascript.NullLayout();

ArrayAppender.prototype.append = function(loggingEvent) {
    var formattedMessage = this.getLayout().format(loggingEvent);
    if (this.getLayout().ignoresThrowable()) {
        formattedMessage += loggingEvent.getThrowableStrRep();
    }
    this.logMessages.push(formattedMessage);
};

ArrayAppender.prototype.toString = function() {
    return "[ArrayAppender]";
};

Пример использования:

var log = log4javascript.getLogger("main");
var appender = new ArrayAppender();
log.addAppender(appender);
log.debug("A message");
alert(appender.logMessages);
...