Запись в Winston в файл задерживается, в консоль - нет (Node.js) - PullRequest
2 голосов
/ 02 февраля 2020

У меня есть приложение Node.js, которое запускает команды оболочки с использованием execSync и использует winston для регистрации сообщений как на консоли, так и на транспортах файлов.

Проблема: Путем отслеживания В файле журнала мы видим, что сообщение, записываемое на консоль, не сразу записывается в файл, пока сценарий не завершится.

Есть ли способ заставить Winston немедленно сбросить журналы в файл?


Используя узел 12.14.1, winston 3.2.1, Ubuntu 18.04.3

В середине пробега

(слева) tail -f logs/test.log

(справа) node test.js

enter image description here

Конец трассы

(слева) tail -f logs/test.log

(Справа) node test.js

enter image description here


Nodejs Код

const winston = require('winston');
const { execSync } = require('child_process');

const options = {
    file: {
        level: 'debug',
        filename: `./logs/test.log`,
    },
    console: {
        level: 'debug'
    }
};

let logger = winston.createLogger({
    transports: [
        new winston.transports.File(options.file),
        new winston.transports.Console(options.console),
    ]
});

logger.info('First log message')

for (const name of ['jack','ryan','tom']) {
    const output = execSync('sleep 1');    // simulate a command that does some work
    logger.debug(name)
}
...