diff --git a/server/routes/debug.js b/server/routes/debug.js new file mode 100644 index 0000000..3ed2b6d --- /dev/null +++ b/server/routes/debug.js @@ -0,0 +1,24 @@ +const express = require('express'); +const { ApiDebugLogger } = require('../utils/apiDebugLogger'); + +const router = express.Router(); +const logger = new ApiDebugLogger(); + +// Test endpoint for API debugging +router.get('/debug-test', (req, res) => { + console.log('๐Ÿงช Debug test endpoint called'); + + const response = { + message: 'Debug logging test successful', + timestamp: new Date().toISOString(), + debugEnabled: process.env.API_DEBUG === 'true', + nodeEnv: process.env.NODE_ENV + }; + + // Manual log entry for testing + logger.log('GET', '/api/debug-test', 200, req.query, response); + + res.json(response); +}); + +module.exports = router; diff --git a/server/routes/index.js b/server/routes/index.js index 892c4d4..0cd5302 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -9,6 +9,7 @@ const userRoutes = require('./user'); const alertRoutes = require('./alert'); const dashboardRoutes = require('./dashboard'); const healthRoutes = require('./health'); +const debugRoutes = require('./debug'); // API versioning router.use('/v1/detections', droneDetectionRoutes); @@ -27,6 +28,7 @@ router.use('/users', userRoutes); router.use('/alerts', alertRoutes); router.use('/dashboard', dashboardRoutes); router.use('/health', healthRoutes); +router.use('/debug', debugRoutes); // API documentation endpoint router.get('/', (req, res) => { diff --git a/server/utils/apiDebugLogger.js b/server/utils/apiDebugLogger.js index 81898eb..ceb1515 100644 --- a/server/utils/apiDebugLogger.js +++ b/server/utils/apiDebugLogger.js @@ -3,8 +3,26 @@ const path = require('path'); class ApiDebugLogger { constructor() { - this.logFile = path.join(__dirname, '..', 'api_debug.log'); + this.logFile = path.join(__dirname, '..', '..', 'api_debug.log'); this.enabled = process.env.NODE_ENV === 'development' || process.env.API_DEBUG === 'true'; + + // Debug logging setup + if (this.enabled) { + console.log(`๐Ÿ› ApiDebugLogger: Enabled (NODE_ENV=${process.env.NODE_ENV}, API_DEBUG=${process.env.API_DEBUG})`); + console.log(`๐Ÿ› ApiDebugLogger: Log file path: ${this.logFile}`); + + // Ensure the log file exists + try { + if (!fs.existsSync(this.logFile)) { + fs.writeFileSync(this.logFile, `# API Debug Log Started at ${new Date().toISOString()}\n`); + console.log(`๐Ÿ› ApiDebugLogger: Created log file at ${this.logFile}`); + } + } catch (error) { + console.error(`โŒ ApiDebugLogger: Failed to create log file: ${error}`); + } + } else { + console.log(`๐Ÿ› ApiDebugLogger: Disabled (NODE_ENV=${process.env.NODE_ENV}, API_DEBUG=${process.env.API_DEBUG})`); + } } log(method, url, statusCode, requestBody = {}, responseBody = {}, headers = {}) { @@ -31,8 +49,9 @@ class ApiDebugLogger { try { fs.appendFileSync(this.logFile, logEntry + '\n'); + console.log(`๐Ÿ› API Log: ${method.toUpperCase()} ${url} - ${statusCode}`); } catch (error) { - console.error('Failed to write to API debug log:', error); + console.error('โŒ Failed to write to API debug log:', error); } } @@ -78,8 +97,9 @@ class ApiDebugLogger { try { fs.appendFileSync(this.logFile, logEntry + '\n'); + console.log(`๐Ÿ› API Request: ${req.method} ${req.url}`); } catch (error) { - console.error('Failed to write request to API debug log:', error); + console.error('โŒ Failed to write request to API debug log:', error); } }