我发现使用 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
如果您再次遇到任何问题,请告诉我。
谢谢
我的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
如果您再次遇到任何问题,请告诉我。
谢谢