2

requirejs なしで log4javascript を使用すると、すべて (ページ内アペンダーを含む) が期待どおりに機能します。

requirejs を使用する場合、これは機能します (ポップアップ ウィンドウに警告が表示されます)。

var log = log4javascript.getDefaultLogger();
log.warn("This is a test error message.");

しかし、これは機能しません (ページ内領域は表示されません):

var log4j = log4javascript.getLogger();

var log4jInPageAppender = new log4javascript.InPageAppender();

log4j.addAppender(log4jInPageAppender);

log4j.warn("This is a warning!");

次のようにシムされます。

requirejs.config({
        shim: {'log4javascript': {exports: 'log4javascript'}
    }
});

すべてが log4javascript に対して適切に定義されているように見えるため、log4j および log4jInPageAppender 変数には有効な値が設定されています。

4

1 に答える 1

3

問題は、InPageAppenderlog4javascript 自身のページ読み込み処理コードに依存して、描画を開始できるかどうかを判断することです。RequireJS 経由で読み込まれると、ページは既に読み込まれており、log4javascript のページ読み込み処理コードは実行されません。

を呼び出すことで、これを回避できますlog4javascript.setDocumentReady()。これを行う最も賢明な場所は shiminit()関数にあるようですが、私は RequireJS の専門家ではないので、もっと良い方法があるかもしれません:

requirejs.config({
    shim: {
        'log4javascript': {
            exports: 'log4javascript',
            init: function() {
                log4javascript.setDocumentReady();
            }
        }
    }
});
于 2013-08-18T22:35:28.017 に答える