Log4javascript 你能按需加载PopupAppender吗?

Log4javascript 你能按需加载PopupAppender吗?,log4javascript,Log4javascript,我正在尝试使用log4javascript,想知道是否有任何方法可以按需加载popupapper 我正在寻找类似于浏览器中工具的功能,在我的应用程序中会有一个图标,指示已记录了某些内容,当我单击它时,PopupAppender将打开并允许我查看日志 我想我可以编写自己的非常简单的appender,在出现错误时显示图标,但我不确定如何加载PopupAppender并显示历史消息?正如您所建议的,您必须拥有某种代理appender,它存储日志消息并根据需要创建PopupAppender。大概是这样的

我正在尝试使用log4javascript,想知道是否有任何方法可以按需加载popupapper

我正在寻找类似于浏览器中工具的功能,在我的应用程序中会有一个图标,指示已记录了某些内容,当我单击它时,PopupAppender将打开并允许我查看日志


我想我可以编写自己的非常简单的appender,在出现错误时显示图标,但我不确定如何加载PopupAppender并显示历史消息?

正如您所建议的,您必须拥有某种代理appender,它存储日志消息并根据需要创建PopupAppender。大概是这样的:

演示:

代码:

function OnDemandPopUpAppender() {
    this.popUpAppender = new log4javascript.PopUpAppender();
    this.poppedUp = false;
    this.popperUpperDisplayed = false;
    this.queuedLoggingEvents = [];
}

var proto = new log4javascript.Appender();
OnDemandPopUpAppender.prototype = proto;

proto.appendQueued = function() {
    for (var i = 0, loggingEvent; loggingEvent = this.queuedLoggingEvents[i++]; ) {
        this.popUpAppender.append(loggingEvent);
    }
    this.queuedLoggingEvents.length = 0;
};

proto.popUp = function() {
    this.poppedUp = true;
    this.appendQueued();
};

proto.append = function(loggingEvent) {
    var appender = this;
    this.queuedLoggingEvents.push(loggingEvent);

    if (this.poppedUp) {
        this.appendQueued();
    } else if (!this.popperUpperDisplayed &&
            loggingEvent.level.isGreaterOrEqual(log4javascript.Level.ERROR)) {
        var popperUpper = document.createElement("div");
        popperUpper.style.border = "solid red 2px";
        popperUpper.innerHTML = "There are error messages in the log. Click to open.";
        popperUpper.onclick = function() {
            appender.popUp();
        }
        document.body.appendChild(popperUpper);
        this.popperUpperDisplayed = true;
    }
};

var log = log4javascript.getLogger("main");
log.addAppender(new OnDemandPopUpAppender());

log.debug("A debug message");
log.error("A horrible error!");