在Nodewebkit环境中使用logger

时间:2016-08-26 08:10:57

标签: javascript node.js node-webkit hapijs

我们有一个代码库(React.js和Hapi.js)。基于该代码库,我们有两个版本的应用程序。 一个是普通的Web应用程序,另一个是Nodewebkit(桌面)版本:

  • nw.js v0.12.3
  • io.js v1.2.0
  • Chromium 41.0.2272.76

基本上应用程序是相同的,略有不同。例如,Web版本具有用户(登录)管理,而桌面没有。 Web verison使用MySQL,而桌面版使用Sqlite。存在更多差异,但与问题无关:)

我们面临的问题是如何为Nodewebkit版本制作合适的记录器。在Web版本中,我们为Hapi.js实现了Good-console。它是这样的:

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

以后在代码中用作:

}).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启动文件中使用Good-console初始化代码(在web verison中有效),则不会发生任何事情。服务器未启动,并且没有错误。 我已经将好的控制台使用的节点模块转换为ECMA5,因为NW.js引擎没有运行ECMA6,但是没有任何反应。

早些时候,我们已经为NW.js版本实现了一个简单的记录器。这只是在启动时使用的,它是这样的:

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

Trick是如何使用相同的记录器调用,而不使用代码中的“if”或类似技巧来代替代码。澄清问题:

良好的控制台代码:

 request.server.log(['error'], err.stack);
 request.server.log(['error'], err.stack);

log4js代码:

logger.info('Nodeweb kit Fun is Started :).');

是否有可能附加(当NW版本启动时)log4js函数到request.server,所以代码不知道loggin工具?

或者非常感谢其他一些想法。

1 个答案:

答案 0 :(得分:-1)

我设法使用相同的代码登录两个版本。 仅在NW版本中,我安装了hapi-logger插件。

两个插件现在都使用相同的函数签名:

request.server.log(['error'], err.stack);