pino теряет записи в журнале процесса.exit () - PullRequest
1 голос
/ 21 апреля 2020

Когда моя программа завершает работу через process.exit() (возможно, также по какому-либо сигналу), pino теряет некоторые записи журнала, потому что неправильно их очищает.

Запуск ручного гриппа sh не помогает.

Я использую 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);

Предыстория: Мне не хватало некоторых зависимостей в моем модуле Nest JS, и я настроил Nest JS на использование моей оболочки pino logger следующим образом:

const app = await NestFactory.create<NestExpressApplication>(AppModule, {
    logger: new PinoLoggerService(),
});

Nest JS просто выходил (используя process.exit()) без говорит мне, что было не так. Удаление опции logger заставило Nest JS распечатать неисправный модуль во всех деталях.

1 Ответ

1 голос
/ 21 апреля 2020

Поиск в net дал комментарий по проблеме GitHub Pino 5.8.1 не удается выполнить грипп sh вход в систему при выходе из процесса с аналогичной проблемой, где пользователь GitHub 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);
...