logging
All checks were successful
Build & Deploy KLZ Cables / build-and-deploy (push) Successful in 3m46s

This commit is contained in:
2026-01-26 02:02:46 +01:00
parent a503d3e539
commit ac1e22017e

View File

@@ -1,13 +1,78 @@
import createMiddleware from 'next-intl/middleware';
export default createMiddleware({
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
import { getServerAppServices } from '@/lib/services/create-services.server';
// Create the internationalization middleware
const intlMiddleware = createMiddleware({
// A list of all locales that are supported
locales: ['en', 'de'],
// Used when no locale matches
defaultLocale: 'en'
});
// Main middleware that logs all requests
export default function middleware(request: NextRequest) {
const startTime = Date.now();
const { method, url, headers } = request;
const userAgent = headers.get('user-agent') || 'unknown';
const referer = headers.get('referer') || 'none';
const ip = headers.get('x-forwarded-for') || headers.get('x-real-ip') || 'unknown';
// Get logger service
const services = getServerAppServices();
const logger = services.logger.child({ middleware: 'request-logger' });
// Log incoming request
logger.info('Incoming request', {
method,
url,
userAgent,
referer,
ip,
timestamp: new Date().toISOString(),
});
try {
// Apply internationalization middleware
const response = intlMiddleware(request);
const duration = Date.now() - startTime;
// Log successful response
logger.info('Request completed', {
method,
url,
status: response.status,
duration,
userAgent,
referer,
ip,
timestamp: new Date().toISOString(),
});
return response;
} catch (error) {
const duration = Date.now() - startTime;
// Log error
logger.error('Request failed', {
method,
url,
duration,
userAgent,
referer,
ip,
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
timestamp: new Date().toISOString(),
});
// Re-throw the error to let Next.js handle it
throw error;
}
}
export const config = {
// Match only internationalized pathnames
matcher: ['/((?!api|_next|_vercel|.*\\..*).*)', '/', '/(de|en)/:path*']