我发现使用 log4js-protractor-appender 有问题

I am finding trouble using log4js-protractor-appender

我的log4js.js文件代码

'use strict';
var log4js = require('log4js');
var log4jsGen = {
    getLogger: function getLogger() {
        log4js.loadAppender('file');
        log4js.addAppender(log4js.appenders.file('./ApplicationLogs.log'), 'logs');

        var logger = log4js.getLogger('logs');
        return logger;
    }
};

module.exports = log4jsGen;

我的 conf.js 文件(仅特定于 appender 部分)

"appenders": [{
    "type": "log4js-protractor-appender",
    "append": 'false',
    "maxLogSize": 20480,
    "backups": 3,
    "category": "relative-logger"
}],

问题:

1) 有没有办法在每个 运行 中覆盖日志。 2) 为什么 log4js-protractor-appender 不工作,而不是 log4js 工作,前一个的优点是它解决了作为参数传递的承诺。

这是一个很好的问题。是的 log4js-protractor-appender 很棒。它专为基于 Protractor 的环境而构建,它将所有记录器命令置于 Protractor 控制流中,并在记录之前解决 Protractor 承诺。

您使用不当。 appender 选项不是量角器配置选项的一部分,但可以集成。你的方法有点旧,我已经更新 blog post

这些是回答您的问题 2 的步骤

第 1 步:安装 log4js npm module

第 2 步:安装 log4js-protractor-appender module

第三步:在protractor中添加logger对象创建逻辑beforeLaunch()并赋值到浏览器protractor全局对象上

'use strict';
var log4js = require('log4js');
beforeLaunch:function(){
    if (fs.existsSync('./logs/ExecutionLog.log')) {
        fs.unlink('./logs/ExecutionLog.log')
    }
    log4js.configure({
        appenders: [
            { type: 'log4js-protractor-appender', category: 'protractorLog4js' },
            {
                type: "file",
                filename: './logs/ExecutionLog.log',
                category: 'protractorLog4js'
            }
        ]
    });
},
onPrepare: function() {
    browser.logger = log4js.getLogger('protractorLog4js');
},

第 4 步:通过 browser.logger

访问,在测试中使用记录器对象
describe('sample test', function(){
    it('Sample Check', function(){
        browser.get("http://www.protractortest.org/#/");
        browser.logger.info("Testing Log4js");
        browser.sleep(5000);
        browser.logger.info('Displayed text is:', browser.getCurrentUrl());
        var elm = element(by.css('.lead'))
        browser.logger.info('Displayed text is:', elm.getText());
    });
});

但需要注意的一件事是 - 此附加程序只是一个控制台附加程序,无法写入文件。该文件仍将包含未解决的承诺

示例输出:

[21:54:23] I/local - Starting selenium standalone server...
[21:54:23] I/launcher - Running 1 instances of WebDriver
[21:54:25] I/local - Selenium standalone server started at http://192.168.1.5:60454/wd/hub
Started
[2017-02-03 21:54:30.905] [INFO] protractorLog4js - Testing Log4js
[2017-02-03 21:54:35.991] [INFO] protractorLog4js - Displayed text is: http://www.protractortest.org/#/
[2017-02-03 21:54:36.143] [INFO] protractorLog4js - Displayed text is: Protractor is an end-to-end test framework for Angular and AngularJS applications. Protractor runs tests against your application running in a real browser, interacting with it as a user would.
.

问题 1 的答案:如何覆盖每个日志 运行。我在 beforeLaunch() 中添加了一个简单的逻辑来删除旧日志(如果它们存在)以及我在上面粘贴的代码片段的一部分

我已经检查过这个问题并按照答案 1 中提到的步骤进行操作,它对我有效。

之前我只在控制台中获取日志输出,但现在我也在控制台和文件中获取日志输出。

我在 conf 文件中的 log4js 配置中更正了文件路径传递和设置类型:"file"。

Log4js in Conf file

Log appender in file

如果您再次遇到任何问题,请告诉我。

谢谢