【问题标题】:Using logger in Nodewebkit environment在 Nodewebkit 环境中使用记录器
【发布时间】:2016-08-26 08:10:56
【问题描述】:

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

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

应用程序基本相同,略有不同。比如网页版有用户(登录)管理,而桌面版没有。网页版使用 MySQL,桌面版使用 Sqlite。还有更多区别,但与问题无关:)

我们面临的问题是如何为 Nodewebkit 版本制作合适的记录器。在网页版中,我们为 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 版本),则不会发生任何事情。服务器没有启动,也没有错误。 由于 NW.js 引擎没有运行 ECMA6,我已将良好控制台使用的节点模块转换为 ECMA5,但再次没有任何反应。

之前,我们已经为 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 :).');
});
 });

技巧是如何使用相同的记录器调用,而无需在代码中使用 '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 版本启动时),所以代码不知道登录工具?

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

【问题讨论】:

    标签: javascript node.js node-webkit hapijs


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      相关资源
      最近更新 更多