log4javascript可以重用相同(完全相同)的PopUpAppender吗?

我的意思是:一旦开始登录,PopUpAppender将创建一个新窗口(通常使用'windowId'之类的*'log4javascriptConsoleWindow_1381843187828_742325019557029'*)。

现在,设置了附加程序(PopUpAppender),如下所示:appender.setReopenWhenClosed(true)-在这种情况下,即使窗口关闭,下一条日志消息也会为其打开一个新窗口。
我想要的是找回以前关闭的窗口(一个带有奇怪的windowId的窗口),这样我的所有日​​志消息都放在一个地方。

用几句话-我希望所有的日志消息都在一个窗口中。

一种方法(我认为)是-修改表示PopUpAppender的HTML并修改生成windowId的行-这样,每次都会创建相同的窗口。到目前为止,一切都很好-仅清空了'LogEntry'数组。因此,在登录之前,您可能需要保存它们,然后以某种方式将它们重新插入(在开始时)在新窗口中。

我愿意尝试这种方法-我不确定这是正确的方法-因此,如果有人有更好的主意,请与我们(我)分享。

最佳答案

我可以在log4javascript 2.0中添加对此的支持。同时,我建议创建一个包装PopupAppender的appender对象,并存储所有通过的日志记录事件,以便在重新打开弹出窗口时可以重新添加它们。

function WrappedPopUpAppender(popUpAppender) {
    var appender = this;
    this.popUpAppender = popUpAppender;
    this.loggingEvents = [];
    this.closed = false;

    popUpAppender.addEventListener("unload", function() {
        appender.closed = true;
    });
}

WrappedPopUpAppender.prototype = new log4javascript.Appender();
WrappedPopUpAppender.prototype.append = function(loggingEvent) {
    this.loggingEvents.push(loggingEvent);
    if (this.closed) {
        for (var i = 0, evt; evt = this.loggingEvents[i++]; ) {
            this.popUpAppender.append(evt);
        }
        this.closed = false;
    } else {
        this.popUpAppender.append(loggingEvent);
    }
};

var popUpAppender = new log4javascript.PopUpAppender();
popUpAppender.setReopenWhenClosed(true);
var wrappedAppender = new WrappedPopUpAppender(popUpAppender);

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

09-20 21:18