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);
当我的程序通过 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);