diff --git a/backend/logger.js b/backend/logger.js new file mode 100644 index 0000000..2fe3cd8 --- /dev/null +++ b/backend/logger.js @@ -0,0 +1,17 @@ +const { createLogger, format, transports } = require('winston'); +const { combine, timestamp, printf, colorize, errors } = format; + +const logFormat = printf(({ level, message, timestamp, stack }) => { + const stackTrace = stack ? `\n${stack}` : ''; + return `${timestamp} ${level}: ${message}${stackTrace}`; +}); + +const logger = createLogger({ + level: process.env.LOG_LEVEL || (process.env.NODE_ENV === 'production' ? 'info' : 'debug'), + format: combine(errors({ stack: true }), timestamp(), logFormat), + transports: [ + new transports.Console({ format: combine(errors({ stack: true }), colorize(), timestamp(), logFormat) }), + ], +}); + +module.exports = logger; diff --git a/backend/package.json b/backend/package.json index 38e15b8..74ab9dd 100644 --- a/backend/package.json +++ b/backend/package.json @@ -6,7 +6,6 @@ "dev": "nodemon server.js", "start": "node server.js", "test": "jasmine spec/**/*.spec.cjs" - }, "keywords": [], "author": "", @@ -22,6 +21,7 @@ "mongoose": "^8.8.2", "passport": "^0.7.0", "passport-local": "^1.0.0", + "winston": "^3.19.0", "zod": "^4.4.3" }, "devDependencies": { diff --git a/backend/server.js b/backend/server.js index 3f19f00..e9b43f8 100644 --- a/backend/server.js +++ b/backend/server.js @@ -9,6 +9,8 @@ const cors = require('cors'); // Passport configuration require('./config/passportConfig'); +const logger = require('./logger'); + const app = express(); // CORS configuration @@ -30,10 +32,10 @@ app.use('/api/auth', authRoutes); // Connect to MongoDB mongoose.connect(process.env.MONGO_URI, {}).then(() => { - console.log('Connected to MongoDB'); + logger.info('Connected to MongoDB'); app.listen(process.env.PORT, () => { - console.log(`Server running on port ${process.env.PORT}`); + logger.info(`Server running on port ${process.env.PORT}`); }); }).catch((err) => { - console.log('MongoDB connection error:', err); + logger.error('MongoDB connection error', err); });