[当我的程序通过process.exit()
关闭(也许还通过某些信号)时,pino丢失了一些日志条目,因为它没有正确刷新它们。
触发手动冲洗无济于事。
我正在使用Pino 6.2.0。
如何防止日志条目丢失?
const pino = require("pino");
const p = pino();
process.on("exit", () => {
console.log("FLUSH");
p.flush();
});
p.info("A"); // logged
p.info("B"); // NOT logged
process.exit(1);
背景故事:我在NestJS模块中缺少一些依赖项,并且将NestJS配置为使用像这样的pino logger包装器:
const app = await NestFactory.create<NestExpressApplication>(AppModule, {
logger: new PinoLoggerService(),
});
NestJS刚刚退出(使用process.exit()
)而没有告诉我什么地方出了问题。删除logger
选项可使NestJS在所有详细信息中打印出有问题的模块。
搜索网络对GitHub问题Pino 5.8.1 fails to flush log on process exit发表了评论,其中类似的问题是GitHub user brandondoran指出了解决方案:
使用pino.destination()
,它将使用同步写入,除非您禁用它们,不需要显式刷新。
请注意,这可能会降低您的日志记录速度。
const pino = require("pino");
const p = pino({}, pino.destination());
p.info("A"); // logged
p.info("B"); // logged as well
process.exit(1);