Javascript 在Nodewebkit环境中使用记录器
我们有一个代码库(React.js和Hapi.js)。基于该代码库,我们有两个版本的应用程序。 一个只是普通的Web应用程序,另一个是Nodewebkit(桌面)版本:Javascript 在Nodewebkit环境中使用记录器,javascript,node.js,node-webkit,hapijs,Javascript,Node.js,Node Webkit,Hapijs,我们有一个代码库(React.js和Hapi.js)。基于该代码库,我们有两个版本的应用程序。 一个只是普通的Web应用程序,另一个是Nodewebkit(桌面)版本: nw.js v0.12.3 io.JSV1.2.0 铬41.0.2272.76 基本上,应用程序是相同的,只是略有不同。例如,web版本具有用户(登录)管理,而桌面没有。Web verison使用MySQL,而桌面版本使用Sqlite。差异更多,但与问题无关:) 我们面临的问题是如何为Nodewebkit版本制作一个合适的记
- nw.js v0.12.3
- io.JSV1.2.0
- 铬41.0.2272.76
var options = {
ops: {
interval: 1000
},
reporters: config.loggers
};
models.sequelize.sync(/*{force: true}*/).then(function(){
server.register({
register: require('good'),
options: options
}, (err) =>{
if(err) {
console.error(err);
} else {
server.start(() =>{
console.info('Server started at ' + server.info.uri);
});
}
});
log4js = require('log4js');
log4js.configure({
appenders: [
{ type: 'console' },
{ type: 'file', filename: 'logs/project.log', category: 'projects' }
]
});
logger = log4js.getLogger('projects');
logger.setLevel('ERROR');
logger.setLevel('INFO');
server.route(require('./server/config/routes'));
models.sequelize.sync({/*force: true*/}).then(function () {
server.start(function () {
logger.info('Nodeweb kit Fun is Started :).');
});
});
在随后的代码中,它被用作:
}).catch(function (err) {
request.server.log(['error'], err.stack);
response({isError: true, message: 'Could not retrieve connection information'}).code(200);
});
这和预期的一样
我们面临的问题是如何在Nodewebkit环境中包含相同的日志记录功能。
通常,由于我们使用相同的代码库,日志调用也应该相同。应用程序中的所有文件都相同,但index.js除外。我们有两个版本,一个用于启动NW.js,另一个用于正常的web启动
如果我们在NW.js启动文件中使用良好的控制台初始化代码(在web verison中工作),则不会发生任何事情。服务器未启动,并且没有错误。
我已经将good console使用的节点模块传输到ECMA5,因为NW.js引擎没有运行ECMA6,但同样没有发生任何事情
之前,我们已经为NW.js版本实现了一个简单的记录器。仅在启动期间使用,其内容如下:
var options = {
ops: {
interval: 1000
},
reporters: config.loggers
};
models.sequelize.sync(/*{force: true}*/).then(function(){
server.register({
register: require('good'),
options: options
}, (err) =>{
if(err) {
console.error(err);
} else {
server.start(() =>{
console.info('Server started at ' + server.info.uri);
});
}
});
log4js = require('log4js');
log4js.configure({
appenders: [
{ type: 'console' },
{ type: 'file', filename: 'logs/project.log', category: 'projects' }
]
});
logger = log4js.getLogger('projects');
logger.setLevel('ERROR');
logger.setLevel('INFO');
server.route(require('./server/config/routes'));
models.sequelize.sync({/*force: true*/}).then(function () {
server.start(function () {
logger.info('Nodeweb kit Fun is Started :).');
});
});
技巧是如何使用相同的记录器调用,而不在代码中使用“if”或类似技巧填充代码。为了澄清这个问题:
好的控制台代码:
request.server.log(['error'], err.stack);
request.server.log(['error'], err.stack);
log4js代码:
logger.info('Nodeweb kit Fun is Started :).');
是否有可能将log4js函数附加到request.server(当NW版本启动时),这样代码就不知道loggin功能了
或者其他一些想法非常受欢迎。我已经设法使用相同的代码登录两个版本。 只是在NW版本中,我安装了插件 两个插件现在使用相同的函数签名:
request.server.log(['error'], err.stack);