Я нахожу проблемы с использованием 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, заслуга предыдущего состоит в том, что он разрешает обещания, которые передаются в качестве аргумента.

2 ответа

Решение

Это отличный вопрос. Да log4js-транспортир-аппендер - это круто. Он построен специально для сред на базе Protractor и помещает все команды регистратора в поток управления Protractor и разрешает обещания Protractor перед регистрацией.

Вы использовали это неправильно. Параметры appender не являются частью параметров конфигурации Protractor, но могут быть интегрированы. Подход у вас немного старый, и я обновил пост в блоге

Это шаги как ответ на ваш вопрос-2

Шаг 1: Установите модуль log4js npm

Шаг 2. Установите модуль log4js-protractor-appender.

Шаг 3: Добавьте логику создания объекта регистратора в транспортир beforeLaunch() и назначить его на глобальный объект браузера транспортир

'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. Использование объекта logger в ваших тестах путем доступа через 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, и это работает для меня.

Ранее я получал вывод журнала только в консоли, но теперь я получаю журнал в консоли и файл также.

Я исправил передачу пути к файлу и установил тип: "file" в log4js в файле конфигурации.

Log4js в файле конфигурации

Войти appender в файл

Пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы.

Спасибо

Другие вопросы по тегам