【问题标题】:pino loses log entries on process.exit()pino 在 process.exit() 上丢失日志条目
【发布时间】:2020-08-04 10:44:52
【问题描述】:

当我的程序通过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 会详细打印违规模块。

【问题讨论】:

    标签: javascript node.js logging flush pinojs


    【解决方案1】:

    在网上搜索了一个关于 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);
    

    【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 2022-08-17
    • 2015-07-03
    • 2018-09-04
    • 1970-01-01
    相关资源
    最近更新 更多