pino 在 process.exit() 上丢失日志条目

pino loses log entries on process.exit()

当我的程序通过 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 记录器包装器,如下所示:

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 with a similar problem where 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);