У меня есть простой код jest-теста, который создает экземпляр нового регистратора winston с использованием следующей транспортной конфигурации:
it("using TCP protocol", async (done) => {
const sys: any = new ws.Syslog({
host: "localhost",
port: 514,
protocol: "tcp4",
path: "/dev/log",
app_name: "ESB",
facility: "local5",
eol: "\n",
});
let syslogger = winston.createLogger({
levels: winston.config.syslog.levels,
transports: [
sys
]
});
syslogger.info("test msg");
syslogger.close();
});
Тест работает нормально, и я вижу, что сообщения, полученные syslog, но тест не возвращается и зависает после показа результата теста. При отладке (winston-syslog. js) я вижу, что он пытается подключиться снова. Кажется, что обработчик события не завершается. Это предназначено, или это могло быть ошибкой?
.on('close', () => {
//
// Attempt to reconnect on lost connection(s), progressively
// increasing the amount of time between each try.
//
const interval = Math.pow(2, this.retries);
this.connected = false;
setTimeout(() => {
this.retries++;
**this.socket.connect(this.port, this.host);**
}, interval * 1000);
})
Я понимаю, что существует линия для попытки восстановить соединение при потерянных соединениях. Но как мне go фактически закрыть соединение, если оно успешно создано, сообщения отправлены, и мне больше не нужно соединение? Если эта строка закомментирована, jest возвращается, как и ожидалось.
Код выполняется на Centos 7 с узлом v 12.13.0 и:
"winston": "^3.2.1",
"winston-syslog": "^2.4.0",
"winston-transport": "^4.3.0"
Я пропустил какие-либо настройки или очистил вызовы ? Есть ли способ сделать выход обработчика события close ()?
Спасибо!