node.js - 为什么在记录器上调用 .close() 时 winston-syslog 重新打开连接
问题描述
我有一个简单的笑话测试代码,它使用以下传输配置创建一个新的 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);
})
我了解存在尝试重新连接丢失连接的线路。但是,假设连接已成功创建、消息已发送并且我不再需要连接,我该如何实际关闭连接?如果该行被注释,jest 按预期返回。
该代码在 Centos 7 上运行,节点为 v 12.13.0,并且:
"winston": "^3.2.1",
"winston-syslog": "^2.4.0",
"winston-transport": "^4.3.0"
我是否缺少任何配置或清理调用?有没有办法让 close() 事件处理程序退出?
谢谢!