Javascript 在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版本制作一个合适的记

我们有一个代码库(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版本制作一个合适的记录器。在web版本中,我们为Hapi.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 :).');
});
 });
在随后的代码中,它被用作:

}).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);