首页 > 解决方案 > 如何更好地在记录器中添加 uuid

问题描述

------------program1.ts
    consumerGroup.on('message',function(msgc){
                
             uuid=uuid();       
             program2.func2(uuid,msgc);
    
    });
    
    ------Program2.ts
    function func2(uuid,msgc){
    logger.log(uuid,msgc);
         program3.func3(uuid,msgc);
    }
    
    -----------program3.ts
    function func(uuid,msgc){
         logger.log(uuid,msgc);
    }

我必须在记录器中为现有项目中从消费者读取的每条消息实现 UUID。我想出了类似于上面的代码方法,但是有很多子函数,我必须为每个函数/记录器调用做这件事。

有没有更好的方法呢?

标签: javascriptnode.jstypescriptlogginguuid

解决方案


如果您使用 Node 14 及更高版本,则可以使用内置的AsyncLocalStorage。使用 ID 进行日志记录是这个新 API 的典型用例。这是用例的示例:

const { AsyncLocalStorage } = require('async_hooks');
const asyncLocalStorage = new AsyncLocalStorage();

function logWithId(msg) {
  const id = asyncLocalStorage.getStore();
  logger.log(id, msg);
}

asyncLocalStorage.run(uuid(), () => {
  consumerGroup.on('message',function(msgc){
     program2.func2(msgc);
  });
})

// ------Program2.ts
function func2(uuid,msgc){
  logWithId(msgc);
  program3.func3(msgc);
}
    
// -----------program3.ts
function func(uuid,msgc){
  logWithId(msgc);
}

阅读文档以了解更多信息。


推荐阅读