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

问题是InPageAppender依赖于 log4javascript 自己的页面加载处理代码来知道它是否可以开始自己绘制。当通过 RequireJS 加载时,页面已经加载并且 log4javascript 的页面加载处理代码永远不会运行。

你可以通过调用来解决这个问题log4javascript.setDocumentReady()。最明智的做法似乎是在 shiminit()函数中,但我不是 RequireJS 专家,所以可能有更好的方法:

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