Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/big-jobs-make.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Fixes an issue where the use of the Astro internal logger couldn't work with Cloudflare Vite plugin.
5 changes: 5 additions & 0 deletions .changeset/green-zebras-lick.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Fixes an issue where the new Astro v6 development server didn't log anything when navigating the pages.
4 changes: 3 additions & 1 deletion benchmark/packages/adapter/src/server.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as fs from 'node:fs';
import type { SSRManifest } from 'astro';
import { AppPipeline, BaseApp } from 'astro/app';
import { AppPipeline, BaseApp, type LogRequestPayload } from 'astro/app';

class MyApp extends BaseApp {
#manifest: SSRManifest | undefined;
Expand Down Expand Up @@ -30,6 +30,8 @@ class MyApp extends BaseApp {
streaming,
});
}

logRequest(_options: LogRequestPayload) {}
}

export function createExports(manifest: SSRManifest) {
Expand Down
2 changes: 1 addition & 1 deletion packages/astro/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,9 @@
"ci-info": "^4.4.0",
"clsx": "^2.1.1",
"common-ancestor-path": "^2.0.0",
"consola": "^3.2.3",
"cookie": "^1.1.1",
"cssesc": "^3.0.0",
"debug": "^4.4.3",
"deterministic-object-hash": "^2.0.2",
"devalue": "^5.6.2",
"diff": "^8.0.3",
Expand Down
6 changes: 3 additions & 3 deletions packages/astro/src/cli/flags.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Arguments } from 'yargs-parser';
import { Logger, type LogOptions } from '../core/logger/core.js';
import { nodeLogDestination } from '../core/logger/node.js';
import type { Logger, LogOptions } from '../core/logger/core.js';
import { createNodeLogger, nodeLogDestination } from '../core/logger/node.js';
import type { AstroInlineConfig } from '../types/public/config.js';

// Alias for now, but allows easier migration to node's `parseArgs` in the future.
Expand Down Expand Up @@ -52,5 +52,5 @@ export function createLoggerFromFlags(flags: Flags): Logger {
logging.level = 'silent';
}

return new Logger(logging);
return createNodeLogger({ logLevel: logging.level });
}
2 changes: 1 addition & 1 deletion packages/astro/src/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export function getViteConfig(
{ runHookConfigSetup, runHookConfigDone },
] = await Promise.all([
import('vite'),
import('../core/config/logging.js'),
import('../core/logger/node.js'),
import('../core/config/index.js'),
import('../core/create-vite.js'),
import('../integrations/hooks.js'),
Expand Down
5 changes: 4 additions & 1 deletion packages/astro/src/core/app/app.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BaseApp } from './base.js';
import { BaseApp, type LogRequestPayload } from './base.js';
import { AppPipeline } from './pipeline.js';

export class App extends BaseApp {
Expand All @@ -12,4 +12,7 @@ export class App extends BaseApp {
isDev(): boolean {
return false;
}

// Should we log something for our users?
logRequest(_options: LogRequestPayload) {}
}
63 changes: 62 additions & 1 deletion packages/astro/src/core/app/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
REROUTABLE_STATUS_CODES,
REROUTE_DIRECTIVE_HEADER,
responseSentSymbol,
REWRITE_DIRECTIVE_HEADER_KEY,
} from '../constants.js';
import { getSetCookiesFromResponse } from '../cookies/index.js';
import { AstroError, AstroErrorData } from '../errors/index.js';
Expand Down Expand Up @@ -342,6 +343,7 @@ export abstract class BaseApp<P extends Pipeline = AppPipeline> {
}

public async render(request: Request, renderOptions?: RenderOptions): Promise<Response> {
const timeStart = performance.now();
let routeData: RouteData | undefined = renderOptions?.routeData;
let locals: object | undefined;
let clientAddress: string | undefined;
Expand Down Expand Up @@ -379,7 +381,8 @@ export abstract class BaseApp<P extends Pipeline = AppPipeline> {
'The adapter ' + this.manifest.adapterName + ' provided a custom RouteData for ',
request.url,
);
this.logger.debug('router', 'RouteData:\n' + routeData);
this.logger.debug('router', 'RouteData');
this.logger.debug('router', routeData);
}
if (locals) {
if (typeof locals !== 'object') {
Expand Down Expand Up @@ -443,6 +446,16 @@ export abstract class BaseApp<P extends Pipeline = AppPipeline> {
});
session = renderContext.session;
response = await renderContext.render(componentInstance);

const isRewrite = response.headers.has(REWRITE_DIRECTIVE_HEADER_KEY);

this.logThisRequest({
pathname,
method: request.method,
statusCode: response.status,
isRewrite,
timeStart,
});
} catch (err: any) {
this.logger.error(null, err.stack || err.message || String(err));
return this.renderError(request, {
Expand Down Expand Up @@ -672,4 +685,52 @@ export abstract class BaseApp<P extends Pipeline = AppPipeline> {
public getManifest() {
return this.pipeline.manifest;
}

logThisRequest({
pathname,
method,
statusCode,
isRewrite,
timeStart,
}: {
pathname: string;
method: string;
statusCode: number;
isRewrite: boolean;
timeStart: number;
}) {
const timeEnd = performance.now();
this.logRequest({
pathname,
method,
statusCode,
isRewrite,
reqTime: timeEnd - timeStart,
});
}

public abstract logRequest(_options: LogRequestPayload): void;
}

export type LogRequestPayload = {
/**
* The current path being rendered
*/
pathname: string;
/**
* The method of the request
*/
method: string;
/**
* The status code of the request
*/
statusCode: number;
/**
* If the current request is a rewrite
*/
isRewrite: boolean;
/**
* How long it took to render the request
*/
reqTime: number;
};
24 changes: 23 additions & 1 deletion packages/astro/src/core/app/dev/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@ import { MiddlewareNoDataOrNextCalled, MiddlewareNotAResponse } from '../../erro
import { type AstroError, isAstroError } from '../../errors/index.js';
import type { Logger } from '../../logger/core.js';
import type { CreateRenderContext, RenderContext } from '../../render-context.js';
import { BaseApp, type DevMatch, type RenderErrorOptions } from '../base.js';
import {
BaseApp,
type DevMatch,
type LogRequestPayload,
type RenderErrorOptions,
} from '../base.js';
import type { SSRManifest } from '../types.js';
import { NonRunnablePipeline } from './pipeline.js';
import { getCustom404Route, getCustom500Route } from '../../routing/helpers.js';
import { ensure404Route } from '../../routing/astro-designed-error-pages.js';
import { matchRoute } from '../../routing/dev.js';
import type { RunnablePipeline } from '../../../vite-plugin-app/pipeline.js';
import type { RoutesList } from '../../../types/astro.js';
import { req } from '../../messages.js';

export class DevApp extends BaseApp<NonRunnablePipeline> {
logger: Logger;
Expand Down Expand Up @@ -134,4 +140,20 @@ export class DevApp extends BaseApp<NonRunnablePipeline> {
return renderRoute(custom500);
}
}

logRequest({ pathname, method, statusCode, isRewrite, reqTime }: LogRequestPayload) {
if (pathname === '/favicon.ico') {
return;
}
this.logger.info(
null,
req({
url: pathname,
method,
statusCode,
isRewrite,
reqTime,
}),
);
}
}
7 changes: 6 additions & 1 deletion packages/astro/src/core/app/entrypoints/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
export type { RoutesList } from '../../../types/astro.js';
export { App } from '../app.js';
export { BaseApp, type RenderErrorOptions, type RenderOptions } from '../base.js';
export {
BaseApp,
type RenderErrorOptions,
type RenderOptions,
type LogRequestPayload,
} from '../base.js';
export { fromRoutingStrategy, toRoutingStrategy } from '../common.js';
export { createConsoleLogger } from '../logging.js';
export {
Expand Down
3 changes: 3 additions & 0 deletions packages/astro/src/core/build/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import type { BuildInternals } from './internal.js';
import { BuildPipeline } from './pipeline.js';
import type { StaticBuildOptions } from './types.js';
import type { CreateRenderContext, RenderContext } from '../render-context.js';
import type { LogRequestPayload } from '../app/base.js';

export class BuildApp extends BaseApp<BuildPipeline> {
createPipeline(_streaming: boolean, manifest: SSRManifest, ..._args: any[]): BuildPipeline {
Expand Down Expand Up @@ -52,4 +53,6 @@ export class BuildApp extends BaseApp<BuildPipeline> {
});
}
}

logRequest(_options: LogRequestPayload) {}
}
2 changes: 1 addition & 1 deletion packages/astro/src/core/build/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
import type { AstroSettings, RoutesList } from '../../types/astro.js';
import type { AstroInlineConfig, RuntimeMode } from '../../types/public/config.js';
import { resolveConfig } from '../config/config.js';
import { createNodeLogger } from '../config/logging.js';
import { createNodeLogger } from '../logger/node.js';
import { createSettings } from '../config/settings.js';
import { createVite } from '../create-vite.js';
import { createKey, getEnvironmentKey, hasEnvironmentKey } from '../encryption.js';
Expand Down
12 changes: 0 additions & 12 deletions packages/astro/src/core/config/logging.ts

This file was deleted.

2 changes: 1 addition & 1 deletion packages/astro/src/core/dev/restart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { SETTINGS_FILE } from '../../preferences/constants.js';
import type { AstroSettings } from '../../types/astro.js';
import type { AstroInlineConfig } from '../../types/public/config.js';
import { createSettings, resolveConfig } from '../config/index.js';
import { createNodeLogger } from '../config/logging.js';
import { createNodeLogger } from '../logger/node.js';
import { collectErrorMetadata } from '../errors/dev/utils.js';
import { isAstroConfigZodError } from '../errors/errors.js';
import { createSafeError } from '../errors/index.js';
Expand Down
Loading
Loading