From 0e8c7e8bfd1699d2f2d9cbd99e0de5eef4f2f168 Mon Sep 17 00:00:00 2001 From: Florian Lefebvre Date: Mon, 8 Jun 2026 11:13:25 +0200 Subject: [PATCH 1/3] chore(renovate): bump max memory (#16993) --- .github/renovate.json5 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 918989bace21..c8708e4e8d17 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -10,6 +10,9 @@ "labels": ["dependencies"], "rangeStrategy": "bump", "postUpdateOptions": ["pnpmDedupe"], + "toolSettings": { + "nodeMaxMemory": 3072 + }, "lockFileMaintenance": { "enabled": true }, From 4ecff3268acb6ee3db719c4b38bbaead703ff4de Mon Sep 17 00:00:00 2001 From: Maxim Slobodchikov <93232189+maximslo@users.noreply.github.com> Date: Mon, 8 Jun 2026 09:40:53 -0400 Subject: [PATCH 2/3] =?UTF-8?q?fix(node):=20resolve=20experimental=20logge?= =?UTF-8?q?r=20before=20logging=20server=20startup=20=E2=80=A6=20(#16985)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(node): resolve experimental logger before logging server startup message * fix(node): re-create adapterLogger when pipeline logger is replaced * test(app): verify adapterLogger invalidates cache when pipeline logger changes * test(app): fix test comment * ci: retrigger tests * fix(node): keep standalone() synchronous to preserve caller contract * refactor(node): trim comment in standalone --- .changeset/fix-node-logger-startup-message.md | 6 ++++++ packages/astro/src/core/app/base.ts | 5 +++-- packages/astro/test/units/app/logger.test.ts | 17 +++++++++++++++++ packages/integrations/node/src/standalone.ts | 5 ++++- 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 .changeset/fix-node-logger-startup-message.md diff --git a/.changeset/fix-node-logger-startup-message.md b/.changeset/fix-node-logger-startup-message.md new file mode 100644 index 000000000000..b5b802926037 --- /dev/null +++ b/.changeset/fix-node-logger-startup-message.md @@ -0,0 +1,6 @@ +--- +'@astrojs/node': patch +'astro': patch +--- + +Fixes the `experimental.logger` destination not being used for the "Server listening on..." startup message. The logger is now resolved before the server starts listening, and `adapterLogger` re-creates itself when the underlying logger changes so the startup message uses the correct destination. diff --git a/packages/astro/src/core/app/base.ts b/packages/astro/src/core/app/base.ts index 941d0d602fbf..979bffcd56db 100644 --- a/packages/astro/src/core/app/base.ts +++ b/packages/astro/src/core/app/base.ts @@ -154,9 +154,10 @@ export abstract class BaseApp

{ } get adapterLogger(): AstroIntegrationLogger { - if (!this.#adapterLogger) { + const currentOptions = this.logger.options; + if (!this.#adapterLogger || this.#adapterLogger.options !== currentOptions) { this.#adapterLogger = new AstroIntegrationLogger( - this.logger.options, + currentOptions, this.manifest.adapterName, ); } diff --git a/packages/astro/test/units/app/logger.test.ts b/packages/astro/test/units/app/logger.test.ts index 1ae042c8194e..8fe3694e9658 100644 --- a/packages/astro/test/units/app/logger.test.ts +++ b/packages/astro/test/units/app/logger.test.ts @@ -43,6 +43,23 @@ function createAppWithLogger(experimentalLogger?: LoggerHandlerConfig) { } describe('SSR Logger', () => { + it('adapterLogger re-creates itself after the pipeline logger is replaced', async () => { + const app = createAppWithLogger({ entrypoint: 'astro/logger/json' }); + + // Access adapterLogger before getLogger(), caches it with the default options + const beforeOptions = app.adapterLogger.options; + + await app.pipeline.getLogger(); + + // After getLogger() replaces pipeline.logger, adapterLogger should re-create + const afterOptions = app.adapterLogger.options; + assert.notEqual( + beforeOptions, + afterOptions, + 'adapterLogger should re-create when the pipeline logger is replaced', + ); + }); + it('resolves a custom logger destination from the manifest on first request', async () => { const app = createAppWithLogger({ entrypoint: 'astro/logger/json' }); diff --git a/packages/integrations/node/src/standalone.ts b/packages/integrations/node/src/standalone.ts index ff7538c2795d..446b12c742e4 100644 --- a/packages/integrations/node/src/standalone.ts +++ b/packages/integrations/node/src/standalone.ts @@ -32,7 +32,10 @@ export default function standalone( const server = createServer(handler, host, port); server.server.listen(port, host); if (process.env.ASTRO_NODE_LOGGING !== 'disabled') { - logListeningOn(app.adapterLogger, server.server, host); + // Resolve the logger before the 'listening' event fires so the startup message + // uses the correct destination. standalone() stays synchronous so callers get + // the server object immediately. + app.pipeline.getLogger().then(() => logListeningOn(app.adapterLogger, server.server, host)); } server.server.on('close', () => { app.logger.close(); From 132a879eaa4a6ba4b31a78bd9af019d5cc17767b Mon Sep 17 00:00:00 2001 From: Maxim Slobodchikov Date: Mon, 8 Jun 2026 13:46:18 +0000 Subject: [PATCH 3/3] [ci] format --- packages/astro/src/core/app/base.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/astro/src/core/app/base.ts b/packages/astro/src/core/app/base.ts index 979bffcd56db..421061e39ee5 100644 --- a/packages/astro/src/core/app/base.ts +++ b/packages/astro/src/core/app/base.ts @@ -156,10 +156,7 @@ export abstract class BaseApp

{ get adapterLogger(): AstroIntegrationLogger { const currentOptions = this.logger.options; if (!this.#adapterLogger || this.#adapterLogger.options !== currentOptions) { - this.#adapterLogger = new AstroIntegrationLogger( - currentOptions, - this.manifest.adapterName, - ); + this.#adapterLogger = new AstroIntegrationLogger(currentOptions, this.manifest.adapterName); } return this.#adapterLogger; }