如何与node.js中的winston同步logging

我相当新的node.js,我来自C#/ Java的土地,所以我需要一些日志logging的帮助。

现在我正在用Selenium编写testing,使用本地捆绑和mocha作为我的testing框架。 我有一个base-page.js – 所有其他Page Objects基类,其中包含与页面交互的基本方法和logInfo(message)方法。 就目前而言,我已经决定和winston一起去伐木了。 我的logging器configuration如下所示:

 import winston from 'winston'; const tsFormat = () => (new Date()).toLocaleDateString() + ": " + (new Date()).toLocaleTimeString(); const logger = new (winston.Logger)({ transports: [ new (winston.transports.Console) ({ timestamp: tsFormat, colorize: true }), new (winston.transports.File) ({ filename: 'logs.log'}) ] }); logger.level = 'silly'; logger.cli(); 

它工作得很好。 事情是,当我运行我的testing用例时,所有的日志消息都会立即logging下来,而不是作为他们应该logging的函数的一部分,至less从C#/ Java的angular度来看。

所以我希望他们只有在页面的动作执行(即button点击)时才被logging。 我能在这里做什么?

编辑 :提供代码以及一些解释。 我的base-page.js方法如下所示:

  click(logMessage, locator, ...args) { this.logInfo(logMessage); //this.driver.findElement() is Selenium related. It returns a promise, //so I suppose this is a reason of proper execution of interactions. this.driver.findElement(locator.getLocator(...args)).click(); } 

我的logInfo()方法:

  logInfo(logMessage) { logger.logInfo(logMessage); } 

logger自己是Winstonlogging器的input,移动到另一个文件。 提供configuration。

最后,我的testing是通过inheritance链调用base-page.js的方法,我他们也被称为asynchronous ,但是由于Selenium的承诺,它看起来像是同步的。 实际上,只有logging表明他们不是。 那么,这里可以做些什么呢?

更新 :尝试从click()返回的Promise冒泡

 this.driver.findElement(locator.getLocator(...args)).click(); 

不影响整体行为。