From bcad4f67a25f5c9d48e07e3e1c66fba245b4641e Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 22 Feb 2026 13:17:14 +0100 Subject: [PATCH] fix(gateway): unify listen startup log across bind hosts --- src/gateway/server-startup-log.test.ts | 21 +++++++++++++++++++++ src/gateway/server-startup-log.ts | 9 ++------- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/gateway/server-startup-log.test.ts b/src/gateway/server-startup-log.test.ts index 04648ddeb..60b820da2 100644 --- a/src/gateway/server-startup-log.test.ts +++ b/src/gateway/server-startup-log.test.ts @@ -42,4 +42,25 @@ describe("gateway startup log", () => { expect(warn).not.toHaveBeenCalled(); }); + + it("logs all listen endpoints on a single line", () => { + const info = vi.fn(); + const warn = vi.fn(); + + logGatewayStartup({ + cfg: {}, + bindHost: "127.0.0.1", + bindHosts: ["127.0.0.1", "::1"], + port: 18789, + log: { info, warn }, + isNixMode: false, + }); + + const listenMessages = info.mock.calls + .map((call) => call[0]) + .filter((message) => message.startsWith("listening on ")); + expect(listenMessages).toEqual([ + `listening on ws://127.0.0.1:18789, ws://[::1]:18789 (PID ${process.pid})`, + ]); + }); }); diff --git a/src/gateway/server-startup-log.ts b/src/gateway/server-startup-log.ts index 0a95bc68e..594ac23ba 100644 --- a/src/gateway/server-startup-log.ts +++ b/src/gateway/server-startup-log.ts @@ -27,13 +27,8 @@ export function logGatewayStartup(params: { const formatHost = (host: string) => (host.includes(":") ? `[${host}]` : host); const hosts = params.bindHosts && params.bindHosts.length > 0 ? params.bindHosts : [params.bindHost]; - const primaryHost = hosts[0] ?? params.bindHost; - params.log.info( - `listening on ${scheme}://${formatHost(primaryHost)}:${params.port} (PID ${process.pid})`, - ); - for (const host of hosts.slice(1)) { - params.log.info(`listening on ${scheme}://${formatHost(host)}:${params.port}`); - } + const listenEndpoints = hosts.map((host) => `${scheme}://${formatHost(host)}:${params.port}`); + params.log.info(`listening on ${listenEndpoints.join(", ")} (PID ${process.pid})`); params.log.info(`log file: ${getResolvedLoggerSettings().file}`); if (params.isNixMode) { params.log.info("gateway: running in Nix mode (config managed externally)");