почему winston-syslog повторно открывает соединение, когда .close () вызывается в логгере - PullRequest
0 голосов
/ 13 января 2020

У меня есть простой код 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 ()?

Спасибо!

...