diff --git a/benchmark/packages/adapter/src/server.ts b/benchmark/packages/adapter/src/server.ts
index c9cbf65129f2..a53766479081 100644
--- a/benchmark/packages/adapter/src/server.ts
+++ b/benchmark/packages/adapter/src/server.ts
@@ -22,7 +22,6 @@ class MyApp extends BaseApp {
createPipeline(streaming: boolean) {
return AppPipeline.create({
- logger: this.logger,
manifest: this.manifest,
streaming,
});
diff --git a/packages/astro/src/cli/preferences/index.ts b/packages/astro/src/cli/preferences/index.ts
index dcd8ac301046..7a1318d7bf98 100644
--- a/packages/astro/src/cli/preferences/index.ts
+++ b/packages/astro/src/cli/preferences/index.ts
@@ -70,7 +70,11 @@ export async function preferences(
const inlineConfig = flagsToAstroInlineConfig(flags);
const logger = createLoggerFromFlags(flags);
const { astroConfig } = await resolveConfig(inlineConfig ?? {}, 'dev');
- const settings = await createSettings(astroConfig, fileURLToPath(astroConfig.root));
+ const settings = await createSettings(
+ astroConfig,
+ inlineConfig.logLevel,
+ fileURLToPath(astroConfig.root),
+ );
const opts: SubcommandOptions = {
location: flags.global ? 'global' : undefined,
json: !!flags.json,
diff --git a/packages/astro/src/config/index.ts b/packages/astro/src/config/index.ts
index 0ab184ea32d1..382ab8c51b32 100644
--- a/packages/astro/src/config/index.ts
+++ b/packages/astro/src/config/index.ts
@@ -46,7 +46,7 @@ export function getViteConfig(
]);
const logger = createNodeLogger(inlineAstroConfig);
const { astroConfig: config } = await resolveConfig(inlineAstroConfig, cmd);
- let settings = await createSettings(config, userViteConfig.root);
+ let settings = await createSettings(config, inlineAstroConfig.logLevel, userViteConfig.root);
settings = await runHookConfigSetup({ settings, command: cmd, logger });
const routesList = await createRoutesList(
{
diff --git a/packages/astro/src/container/index.ts b/packages/astro/src/container/index.ts
index f577c919d3dd..c21f2ee10de1 100644
--- a/packages/astro/src/container/index.ts
+++ b/packages/astro/src/container/index.ts
@@ -171,6 +171,7 @@ function createManifest(
latestAstroVersion: undefined,
debugInfoOutput: '',
},
+ logLevel: 'silent',
};
}
diff --git a/packages/astro/src/core/app/app.ts b/packages/astro/src/core/app/app.ts
index 8c22f993c1d7..2806b1f4162c 100644
--- a/packages/astro/src/core/app/app.ts
+++ b/packages/astro/src/core/app/app.ts
@@ -4,7 +4,6 @@ import { AppPipeline } from './pipeline.js';
export class App extends BaseApp {
createPipeline(streaming: boolean): AppPipeline {
return AppPipeline.create({
- logger: this.logger,
manifest: this.manifest,
streaming,
});
diff --git a/packages/astro/src/core/app/base.ts b/packages/astro/src/core/app/base.ts
index f8053d1767ec..9bce45bb9698 100644
--- a/packages/astro/src/core/app/base.ts
+++ b/packages/astro/src/core/app/base.ts
@@ -108,15 +108,16 @@ export abstract class BaseApp
{
pipeline: P;
adapterLogger: AstroIntegrationLogger;
baseWithoutTrailingSlash: string;
- logger = new Logger({
- dest: consoleLogDestination,
- level: 'info',
- });
+ logger: Logger;
constructor(manifest: SSRManifest, streaming = true, ...args: any[]) {
this.manifest = manifest;
this.manifestData = { routes: manifest.routes.map((route) => route.routeData) };
this.baseWithoutTrailingSlash = removeTrailingForwardSlash(manifest.base);
this.pipeline = this.createPipeline(streaming, manifest, ...args);
+ this.logger = new Logger({
+ dest: consoleLogDestination,
+ level: manifest.logLevel,
+ });
this.adapterLogger = new AstroIntegrationLogger(this.logger.options, manifest.adapterName);
// This is necessary to allow running middlewares for 404 in SSR. There's special handling
// to return the host 404 if the user doesn't provide a custom 404
diff --git a/packages/astro/src/core/app/entrypoint.ts b/packages/astro/src/core/app/entrypoint.ts
index 941e95715d2f..ac454e5e66a6 100644
--- a/packages/astro/src/core/app/entrypoint.ts
+++ b/packages/astro/src/core/app/entrypoint.ts
@@ -6,7 +6,7 @@ import { createConsoleLogger } from './logging.js';
export function createApp(dev = import.meta.env.DEV): BaseApp {
if (dev) {
- const logger = createConsoleLogger('debug');
+ const logger = createConsoleLogger(manifest.logLevel);
return new DevApp(manifest, true, logger);
} else {
return new App(manifest);
diff --git a/packages/astro/src/core/app/pipeline.ts b/packages/astro/src/core/app/pipeline.ts
index d574db2653d8..5a1d3ff4411d 100644
--- a/packages/astro/src/core/app/pipeline.ts
+++ b/packages/astro/src/core/app/pipeline.ts
@@ -11,17 +11,14 @@ import {
} from '../render/ssr-element.js';
import { getFallbackRoute, routeIsFallback, routeIsRedirect } from '../routing/index.js';
import { findRouteToRewrite } from '../routing/rewrite.js';
+import { createConsoleLogger } from './logging.js';
export class AppPipeline extends Pipeline {
getName(): string {
return 'AppPipeline';
}
- static create({
- logger,
- manifest,
- streaming,
- }: Pick) {
+ static create({ manifest, streaming }: Pick) {
const resolve = async function resolve(specifier: string) {
if (!(specifier in manifest.entryModules)) {
throw new Error(`Unable to resolve [${specifier}]`);
@@ -33,6 +30,7 @@ export class AppPipeline extends Pipeline {
return createAssetLink(bundlePath, manifest.base, manifest.assetsPrefix);
}
};
+ const logger = createConsoleLogger(manifest.logLevel);
const pipeline = new AppPipeline(
logger,
manifest,
diff --git a/packages/astro/src/core/app/types.ts b/packages/astro/src/core/app/types.ts
index 69e01c90d3ca..c9b3f1b93339 100644
--- a/packages/astro/src/core/app/types.ts
+++ b/packages/astro/src/core/app/types.ts
@@ -17,6 +17,7 @@ import type {
} from '../../types/public/internal.js';
import type { SinglePageBuiltModule } from '../build/types.js';
import type { CspDirective } from '../csp/config.js';
+import type { LoggerLevel } from '../logger/core.js';
import type { SessionDriver } from '../session.js';
import type { RoutingStrategies } from './common.js';
@@ -123,6 +124,7 @@ export type SSRManifest = {
debugInfoOutput: string | undefined;
};
internalFetchHeaders?: Record;
+ logLevel: LoggerLevel;
};
export type SSRActions = {
diff --git a/packages/astro/src/core/build/generate.ts b/packages/astro/src/core/build/generate.ts
index 9cadcbe76610..04063ce189bb 100644
--- a/packages/astro/src/core/build/generate.ts
+++ b/packages/astro/src/core/build/generate.ts
@@ -58,7 +58,10 @@ export async function generatePages(
// Grab the manifest and create the pipeline
const manifest: SSRManifest = prerenderEntry.manifest;
const pipeline = BuildPipeline.create({ internals, manifest, options });
- const { config, logger } = pipeline;
+ const app = prerenderEntry.app as BaseApp;
+
+ const { config } = pipeline;
+ const logger = app.logger;
// HACK! `astro:assets` relies on a global to know if its running in dev, prod, ssr, ssg, full moon
// If we don't delete it here, it's technically not impossible (albeit improbable) for it to leak
@@ -72,7 +75,6 @@ export async function generatePages(
const pagesToGenerate = pipeline.retrieveRoutesToGenerate();
const routeToHeaders: RouteToHeaders = new Map();
- const app = prerenderEntry.app as BaseApp;
if (ssr) {
for (const [routeData, _] of pagesToGenerate) {
if (routeData.prerender) {
@@ -203,7 +205,8 @@ async function generatePage(
routeToHeaders: RouteToHeaders,
) {
// prepare information we need
- const { config, logger } = pipeline;
+ const logger = app.logger;
+ const { config } = pipeline;
async function generatePathWithLogs(
path: string,
@@ -214,7 +217,7 @@ async function generatePage(
isConcurrent: boolean,
) {
const timeStart = performance.now();
- pipeline.logger.debug('build', `Generating: ${path}`);
+ logger.debug('build', `Generating: ${path}`);
const filePath = getOutputFilename(config, path, routeData);
const lineIcon =
@@ -298,7 +301,8 @@ async function getPathsForRoute(
pipeline: BuildPipeline,
builtPaths: Set,
): Promise> {
- const { logger, options, manifest } = pipeline;
+ const { options, manifest } = pipeline;
+ const logger = app.logger;
// TODO: investigate if BuildPipeline can be removed. We already have app.pipeline
// which contains routeCache and other pipeline data. Eventually all pipeline info
// should come from app.pipeline and BuildPipeline can be eliminated.
@@ -506,7 +510,8 @@ async function generatePath(
integrationRoute: IntegrationResolvedRoute,
routeToHeaders: RouteToHeaders,
): Promise {
- const { config, logger, options } = pipeline;
+ const { config, options } = pipeline;
+ const logger = app.logger;
logger.debug('build', `Generating: ${pathname}`);
// This adds the page name to the array so it can be shown as part of stats.
@@ -548,10 +553,10 @@ async function generatePath(
const url = getUrlForPath(
pathname,
- config.base,
+ app.manifest.base,
options.origin,
- config.build.format,
- config.trailingSlash,
+ app.manifest.buildFormat,
+ app.manifest.trailingSlash,
route.type,
);
diff --git a/packages/astro/src/core/build/index.ts b/packages/astro/src/core/build/index.ts
index 041dadf91dff..7dbf14ccd62a 100644
--- a/packages/astro/src/core/build/index.ts
+++ b/packages/astro/src/core/build/index.ts
@@ -64,7 +64,11 @@ export default async function build(
const { userConfig, astroConfig } = await resolveConfig(inlineConfig, 'build');
telemetry.record(eventCliSession('build', userConfig));
- const settings = await createSettings(astroConfig, fileURLToPath(astroConfig.root));
+ const settings = await createSettings(
+ astroConfig,
+ inlineConfig.logLevel,
+ fileURLToPath(astroConfig.root),
+ );
if (inlineConfig.force) {
// isDev is always false, because it's interested in the build command, not the output type
diff --git a/packages/astro/src/core/build/plugins/plugin-manifest.ts b/packages/astro/src/core/build/plugins/plugin-manifest.ts
index 195e09827cc9..92e17959a5ac 100644
--- a/packages/astro/src/core/build/plugins/plugin-manifest.ts
+++ b/packages/astro/src/core/build/plugins/plugin-manifest.ts
@@ -368,5 +368,6 @@ async function buildManifest(
debugInfoOutput: '',
},
internalFetchHeaders,
+ logLevel: settings.logLevel,
};
}
diff --git a/packages/astro/src/core/config/settings.ts b/packages/astro/src/core/config/settings.ts
index 02a8955fb1d6..b1b150b42a47 100644
--- a/packages/astro/src/core/config/settings.ts
+++ b/packages/astro/src/core/config/settings.ts
@@ -5,7 +5,7 @@ import toml from 'smol-toml';
import { getContentPaths } from '../../content/index.js';
import createPreferences from '../../preferences/index.js';
import type { AstroSettings } from '../../types/astro.js';
-import type { AstroConfig } from '../../types/public/config.js';
+import type { AstroConfig, AstroInlineConfig } from '../../types/public/config.js';
import { markdownContentEntryType } from '../../vite-plugin-markdown/content-entry-type.js';
import { getDefaultClientDirectives } from '../client-directive/index.js';
import { SUPPORTED_MARKDOWN_FILE_EXTENSIONS } from './../constants.js';
@@ -19,7 +19,10 @@ import {
import { AstroTimer } from './timer.js';
import { loadTSConfig } from './tsconfig.js';
-export function createBaseSettings(config: AstroConfig): AstroSettings {
+export function createBaseSettings(
+ config: AstroConfig,
+ logLevel: AstroInlineConfig['logLevel'],
+): AstroSettings {
const { contentDir } = getContentPaths(config);
const dotAstroDir = new URL('.astro/', config.root);
const preferences = createPreferences(config, dotAstroDir);
@@ -152,12 +155,17 @@ export function createBaseSettings(config: AstroConfig): AstroSettings {
fontResources: new Set(),
styleHashes: [],
},
+ logLevel: logLevel ?? 'info',
};
}
-export async function createSettings(config: AstroConfig, cwd?: string): Promise {
+export async function createSettings(
+ config: AstroConfig,
+ logLevel: AstroInlineConfig['logLevel'],
+ cwd?: string,
+): Promise {
const tsconfig = await loadTSConfig(cwd);
- const settings = createBaseSettings(config);
+ const settings = createBaseSettings(config, logLevel);
let watchFiles = [];
if (cwd) {
diff --git a/packages/astro/src/core/dev/restart.ts b/packages/astro/src/core/dev/restart.ts
index e8361514c0b7..48b20790efae 100644
--- a/packages/astro/src/core/dev/restart.ts
+++ b/packages/astro/src/core/dev/restart.ts
@@ -84,7 +84,11 @@ async function restartContainer(container: Container): Promise fallbackRoute.pattern.exec(pathname))
- .find((x) => x);
+ route.pattern.exec(path) ||
+ route.fallbackRoutes.map((fallbackRoute) => fallbackRoute.pattern.exec(path)).find((x) => x);
if (!paramsMatch) return {};
const params: Params = {};
route.params.forEach((key, i) => {
diff --git a/packages/astro/src/core/sync/index.ts b/packages/astro/src/core/sync/index.ts
index 126bf94d1791..3653289a8bc5 100644
--- a/packages/astro/src/core/sync/index.ts
+++ b/packages/astro/src/core/sync/index.ts
@@ -63,7 +63,7 @@ export default async function sync(
if (_telemetry) {
telemetry.record(eventCliSession('sync', userConfig));
}
- let settings = await createSettings(astroConfig, inlineConfig.root);
+ let settings = await createSettings(astroConfig, inlineConfig.logLevel, inlineConfig.root);
settings = await runHookConfigSetup({
command: 'sync',
settings,
diff --git a/packages/astro/src/entrypoints/prerender.ts b/packages/astro/src/entrypoints/prerender.ts
index 6b712f60ebb0..dbc8528247a1 100644
--- a/packages/astro/src/entrypoints/prerender.ts
+++ b/packages/astro/src/entrypoints/prerender.ts
@@ -3,13 +3,9 @@ import { manifest as _manifest } from 'virtual:astro:manifest';
import { createApp } from 'astro/app/entrypoint';
const app = createApp();
-const { pageMap, renderers } = _manifest;
+const { renderers } = _manifest;
// Export middleware lazy-loaded
const middleware = () => import('virtual:astro:middleware');
-Object.assign(_manifest, {
- pageMap,
-});
-
export { app, _manifest as manifest, renderers, middleware, actions };
diff --git a/packages/astro/src/manifest/serialized.ts b/packages/astro/src/manifest/serialized.ts
index 14e5a4605737..54ce467d68bd 100644
--- a/packages/astro/src/manifest/serialized.ts
+++ b/packages/astro/src/manifest/serialized.ts
@@ -151,5 +151,6 @@ async function createSerializedManifest(settings: AstroSettings): Promise;
styleHashes: Required['hashes'];
};
+ logLevel: LoggerLevel;
}
/** Generic interface for a component (Astro, Svelte, React, etc.) */
diff --git a/packages/astro/src/vite-plugin-app/createAstroServerApp.ts b/packages/astro/src/vite-plugin-app/createAstroServerApp.ts
index a876545449c8..2d8dc7c9e010 100644
--- a/packages/astro/src/vite-plugin-app/createAstroServerApp.ts
+++ b/packages/astro/src/vite-plugin-app/createAstroServerApp.ts
@@ -16,7 +16,7 @@ export default async function createAstroServerApp(
) {
const logger = new Logger({
dest: nodeLogDestination,
- level: 'info',
+ level: settings.logLevel,
});
const routesList: RoutesList = { routes: routes.map((r: RouteInfo) => r.routeData) };
diff --git a/packages/astro/src/vite-plugin-astro-server/plugin.ts b/packages/astro/src/vite-plugin-astro-server/plugin.ts
index 869f71648b42..3b880e58b7b9 100644
--- a/packages/astro/src/vite-plugin-astro-server/plugin.ts
+++ b/packages/astro/src/vite-plugin-astro-server/plugin.ts
@@ -250,5 +250,6 @@ export async function createDevelopmentManifest(settings: AstroSettings): Promis
latestAstroVersion: settings.latestAstroVersion,
debugInfoOutput: '',
},
+ logLevel: settings.logLevel,
};
}