Node.js 捕获班扬日志/查看班扬日志

Node.js 捕获班扬日志/查看班扬日志,node.js,logging,bunyan,Node.js,Logging,Bunyan,我有一个函数,它使用传递给它的bunyan logger进行日志记录 全局记录器用于整个应用程序,为许多组件提供日志记录功能。这样我们就有了一个集中的日志。大多数时候,我们只是将这个全局记录器传递给所有需要它的函数 但是,在某些情况下,当我调用上述函数时,我希望能够访问由该函数调用编写的日志,但同时我希望保持标准的日志行为(即,将日志写入集中式日志),因此我不能只向它传递一个新的日志记录器实例 用班扬解决这个问题的最好方法是什么 代码应该看起来有点像这样: const funcCallLogge

我有一个函数,它使用传递给它的bunyan logger进行日志记录

全局记录器用于整个应用程序,为许多组件提供日志记录功能。这样我们就有了一个集中的日志。大多数时候,我们只是将这个全局记录器传递给所有需要它的函数

但是,在某些情况下,当我调用上述函数时,我希望能够访问由该函数调用编写的日志,但同时我希望保持标准的日志行为(即,将日志写入集中式日志),因此我不能只向它传递一个新的日志记录器实例

用班扬解决这个问题的最好方法是什么

代码应该看起来有点像这样:

const funcCallLogger=globalloger.cloneSomehow();
doSomeWork(funcCallLogger)。然后(()=>{
const logs=funcCallLogger.getWriteLogs();
//日志应该是写入funcCallLogger的所有日志的数组
//同时,写入funcCallLogger的所有日志也必须
//反映在Globallger中
});
函数doSomeWork(记录器){
logger.info('正在做一些工作…');
等待。。。
}

我正在考虑创建一个子记录器并为其分配一个自定义流以进行日志收集,但我不确定这是否是最好的解决方案。

我决定创建一个子记录器,并将其配置为使用自定义可写流来收集和处理写入其中的所有日志条目。这样,所有来自子日志记录器的日志都将流向全局日志记录器(因此这不会破坏正常的日志记录行为),同时我能够收集流式传输到此自定义实例的日志

以下是示例代码:

import*作为来自“stream”的流;
导出类LogAccumeratingStream扩展了stream.Writable{
私有日志:字符串[]=[];
public\u write(chunk:any,encoding:string,callback:Function):void{
this.logs.push(chunk.toString());
回调();
}
公共getLogs():字符串[]{
返回此.logs;
}
}
下面是我如何运行它的:

const childLogger=globalloger.child({
组件:“SomeWorker”
});
const logsaccumerator=新的LogAccumeratingStream();
const stream=new PrettyStream({useColor:false});
流管(对数累加器);
childLogger.addStream({
级别:“调试”,
类型:“原始”,
流动
});
等待某个工人。运行(childLogger);
const workerLogs=logsacumulator.getLogs();
我使用PrettyStream将日志格式化为字符串,然后通过管道将其传输到LogAccumeratingStream,但是如果需要,您可以直接使用LogAccumeratingStream,只需重写它以处理对象而不是字符串

我不确定这是否是最好的解决方案,因此欢迎评论和进一步回答