Files
F4iljiandQwen-Coder bd28fc60d7 feat(ssr): вынести обработку SSR ошибок в отдельный файл
- Создан resources/js/ssr/errorHandler.js для логирования SSR ошибок
- SSR ошибки теперь записываются в storage/logs/ssr-errors.log
- Обновлён ssr.js с использованием кастомного error handler
- Добавлен storage/logs в .gitignore

Теперь SSR ошибки не засоряют основные логи приложения

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-07 22:55:31 +05:00

59 lines
1.5 KiB
JavaScript

/**
* SSR Error Handler
* Captures and logs SSR-specific errors to a separate log file
*/
import fs from 'fs';
import path from 'path';
const SSR_LOG_FILE = path.join(process.cwd(), 'storage', 'logs', 'ssr-errors.log');
/**
* Format error for logging
*/
function formatError(error) {
const timestamp = new Date().toISOString();
const errorDetails = {
timestamp,
message: error.message || 'Unknown error',
stack: error.stack || 'No stack trace',
type: error.constructor.name,
};
return JSON.stringify(errorDetails) + '\n';
}
/**
* Log error to separate SSR error file
*/
export function logSsrError(error) {
try {
// Ensure directory exists
const logDir = path.dirname(SSR_LOG_FILE);
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir, { recursive: true });
}
// Append error to log file
fs.appendFileSync(SSR_LOG_FILE, formatError(error), 'utf8');
} catch (logError) {
// Fallback to console if file write fails
console.error('Failed to write SSR error log:', logError);
console.error('Original SSR error:', error);
}
}
/**
* Create SSR error handler middleware
* Usage: Wrap your SSR render function with this
*/
export function createSsrErrorHandler() {
return (error) => {
logSsrError(error);
// Return true to suppress error propagation
// Return false to also throw the error
return true;
};
}