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

问题描述 投票:0回答:1

[当我的程序通过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在所有详细信息中打印出有问题的模块。

javascript node.js logging flush pinojs
1个回答
0
投票

搜索网络对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);
© www.soinside.com 2019 - 2024. All rights reserved.