diff --git a/backend/.env.example b/backend/.env.example index 8d6897f..81d9e16 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -3,6 +3,9 @@ PORT=3001 NODE_ENV=development FRONTEND_URL=http://localhost:3000 +# Logging +LOG_LEVEL=info + # Database DATABASE_URL=postgresql://user:password@localhost:5432/synchro diff --git a/backend/.gitignore b/backend/.gitignore index d664268..bb21e92 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -3,6 +3,7 @@ dist/ .env .env.local *.log +logs/ .DS_Store coverage/ .nyc_output/ diff --git a/backend/package.json b/backend/package.json index f8ec222..f2d7707 100644 --- a/backend/package.json +++ b/backend/package.json @@ -36,6 +36,7 @@ "uuid": "^13.0.0", "web-push": "^3.6.7", "winston": "^3.14.0", + "winston-daily-rotate-file": "^5.0.0", "zod": "^3.23.8" }, "devDependencies": { diff --git a/backend/src/config/logger.ts b/backend/src/config/logger.ts index d4327ed..074a924 100644 --- a/backend/src/config/logger.ts +++ b/backend/src/config/logger.ts @@ -1,4 +1,5 @@ import winston from 'winston'; +import DailyRotateFile from 'winston-daily-rotate-file'; import { requestContextStorage } from '../middleware/requestContext'; /** @@ -27,8 +28,21 @@ const logger = winston.createLogger({ ), defaultMeta: { service: 'synchro-backend' }, transports: [ - new winston.transports.File({ filename: 'error.log', level: 'error' }), - new winston.transports.File({ filename: 'combined.log' }), + new DailyRotateFile({ + filename: 'logs/error-%DATE%.log', + datePattern: 'YYYY-MM-DD', + zippedArchive: true, + maxSize: '10m', + maxFiles: '30d', + level: 'error', + }), + new DailyRotateFile({ + filename: 'logs/combined-%DATE%.log', + datePattern: 'YYYY-MM-DD', + zippedArchive: true, + maxSize: '20m', + maxFiles: '14d', + }), ], });