2

log4javascript は同じ (まったく同じ) PopUpAppender を再利用できますか?

つまり、ログを記録し始めると、PopUpAppender は新しいウィンドウを作成します (通常は*'log4javascriptConsoleWindow_1381843187828_742325019557029'* のような ' windowId ' を使用)

これで、アペンダー (PopUpAppender) が次のようにセットアップされました: appender.setReopenWhenClosed( true ) - この場合、ウィンドウが閉じられても、次のログ メッセージによって新しいウィンドウが開きます。私が望むのは、以前に閉じたウィンドウ (奇妙なwindowIdを持つウィンドウ) を取り戻して、すべてのログ メッセージを 1 か所にまとめることです。

一言で言えば、すべてのログ メッセージを 1 つのウィンドウに表示したいのです。

それを行う 1 つの方法 (私が思うに) - PopUpAppender を表す HTML を変更し、windowId を生成する行を変更することです。この方法では、毎回同じウィンドウが作成されます。これまでのところ、「LogEntry」の配列が空になっているだけです。したがって、ログに記録する前に、それらを保存してから、何らかの方法で新しいウィンドウに (最初に) 挿入する必要がある場合があります。

私はこれを試してみたいと思っています - これが正しい方法かどうかはわかりません - 誰かがより良いアイデアを持っているなら、私たち(私)と共有してください.

4

3 に答える 3

1

log4javascript.js の内部を見ると、PopUpAppender が、ログに記録されたイベントのリストが表示されるたびにクリアするように構成されていることがわかります (圧縮されていないバージョンの 4839 行目)。

        while (queuedLoggingEvents.length > 0) {
            queuedLoggingEvents.shift().append();
        }

ポップアップを閉じて再度開いた後でもログ エントリを保持する場合は、上記のコード スニペットを次のように変更することで簡単に修正できます。

        for ( var i = 0; i < queuedLoggingEvents.length; i++ )
            queuedLoggingEvents[i].append();

開発者は、これを PopUpAppender クラスのオプションとして追加するのが理想的です。これを行うには、次の行を追加します。

行 5254、PopUpAppender 定義内:

        var clearMessagesAfterOpening = this.defaults.clearMessagesAfterOpening;

行 5284、PopUpAppender 定義内:

        this.isClearMessagesAfterOpening = function()
        {
            return clearMessagesAfterOpening;
        };
        this.setClearMessagesAfterOpening = function( clearMessagesAfterOpeningParam )
        {
            // This property can be safely altered after logging has started
            clearMessagesAfterOpening = bool( clearMessagesAfterOpeningParam );
        };

PopUpAppender.prototype.defaults 定義の 5459 行目:

        clearMessagesAfterOpening : false,

最後に、4839 行目の初期コードを変更して、新しく追加されたオプションを考慮します。

        for ( var i = 0; i < queuedLoggingEvents.length; i++ )
            queuedLoggingEvents[i].append();
        if ( clearMessagesAfterOpening )
                queuedLoggingEvents.clear();

PopUpAppender の「clearMessagesAfterOpening」オプションを使用して、この動作を制御できるようになりました。上記のコードでは、デフォルトで false になっています。お役に立てれば!:)

于 2015-01-22T17:10:39.900 に答える