我正在尝试生成类似以下的控制台日志:

2015-08-03T08:17:13.730Z - info:  Doing task A... ✓
2015-08-03T08:19:13.730Z - info:  Doing task B...


这样,一旦任务完成,该行的末尾就会出现一个勾号。

我的代码(大部分)是同步的,因此从理论上讲,这样的事情应该起作用:

log.info('Doing task A');
taskA();
log.appendLastLine('✓');


有没有办法使用Winston做到这一点?还是其他NodeJS记录器?有些事情是异步的,但是如果发生这种情况,我可以处理偶尔出现的混乱日志行。

最佳答案

您可以使用基本的stdout对象并手动控制换行符:

process.stdout.write('Doing task A');
taskA();
process.stdout.write('✓ \n');


此外,您可以在同一行中事件覆盖消息,通过在末尾添加'\ r'在一行上创建倒数计时。

process.stdout.write('Task A status: ' + mystatus + ' % \r');


一些日志记录库也支持这种模式,但这基本上是stdout的包装,但是您也可以使用其他功能,例如轻松测量taskA()执行时间:

var logger = require('devmetrics-core')();
logger.info('Measure function execution time');
taskA = logger.measureTimeWrap(taskA, 'taskA');

09-03 17:59