用于单元测试和运行基于浏览器的 Web 应用程序的 Javascript 日志记录设置

Javascript logging setup for unit testing and running browser based web app

本文关键字:应用程序 Web Javascript 日志 设置 记录 浏览器 单元测试 运行 用于      更新时间:2023-09-26

我正在开发一个客户端的javascript web应用程序。我在本地服务器上运行时使用 log4javascript 来记录应用程序功能,并且因为我无法在单元测试期间让 log4javascript 工作(在 Jasmine+Karma 或 Mocha 中),所以我使用 log4js 进行日志记录,同时使用 Node 使用 Mocha 在 Node 上运行单元测试。

要在正常的webb应用程序运行期间进行记录,我从html页面创建log4javascript记录器(因为我无法找到从javascript.js文件创建glogal记录器的方法),使用:

<script src="{{ url_for('static', filename='js/log4javascript.js') }}" type="text/javascript"></script>
<script type="text/javascript">
    var logger = log4javascript.getDefaultLogger();
</script> 

因为我想在单元测试期间登录到控制台,所以我需要在相同的 javascript.js 文件中设置 log4js,我在正常 Web 应用程序运行期间

从中记录。 即:
var log4js = require('log4js');
log4js.configure({
    appenders: [
        {
            "type": "logLevelFilter",
            "level": "DEBUG",
            "appender":
            {
                "type": "console"
            }
        }
    ]
});
var logger = log4js.getLogger();

然后从内部函数我可以使用:

logger.debug("functionName message");

这在从 log4JavaScript 和 log4js 记录时会起作用,但这很混乱,因为我在每个 JavaScript 文件中都有 require('log4js') 语句(在浏览器上运行时似乎被忽略),并且记录器有两个含义。在开发基于浏览器的javascript期间,有没有更好的方法来使用日志记录?

我最终在应用程序代码和winston记录器中使用了console.log进行单元测试。

有关如何覆盖控制台.log的一个很好的例子可以在这里找到:http://seanmonstar.com/post/56448644049/consolelog-all-the-things