diff --git a/README.md b/README.md index bbfdbb9..834c8de 100644 --- a/README.md +++ b/README.md @@ -189,9 +189,16 @@ For local development, you'll need Node.js 18+ and PostgreSQL. See detailed setu - `npm run dev` - Start development server - `npm run build` - Build for production +- `npm run test:logger` - Verify Winston file logging in `dist` - `npm run db:push` - Push schema changes to database - `npm run db:studio` - Open Drizzle Studio to manage database +### Quick Logger Test + +After running `npm run build`, execute `npm run test:logger` to verify that +`/home/zk/logs/codepatchwork.log` is created. The test script writes a few +messages using the bundled logger to ensure file logging works in production. + ## 📝 License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. diff --git a/package.json b/package.json index e755b9a..9a10335 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "sideEffects": ["./server/logger.ts"], "scripts": { "dev": "NODE_ENV=development tsx server/index.ts", - "build": "vite build && esbuild server/index.ts --platform=node --packages=external --bundle --format=esm --outdir=dist", + "build": "vite build && esbuild server/index.ts server/winston-test.ts --platform=node --packages=external --bundle --format=esm --outdir=dist", + "test:logger": "node dist/winston-test.js", "start": "NODE_ENV=production node -r dotenv/config dist/index.js", "check": "tsc", "db:push": "drizzle-kit push" diff --git a/server/logger.ts b/server/logger.ts index a282558..6cd21a3 100644 --- a/server/logger.ts +++ b/server/logger.ts @@ -14,6 +14,20 @@ if (!fs.existsSync(logDir)) { } } +const fileTransport = new transports.File({ filename: logFile }); + +fileTransport.on('error', err => { + console.error('⚠️ File transport error:', err.message); + try { + fs.appendFileSync( + path.join(logDir, 'fallback.log'), + `[${new Date().toISOString()}] Logger failed: ${err.message}\n` + ); + } catch (appendErr) { + console.error('⚠️ Fallback logging failed:', (appendErr as Error).message); + } +}); + const logger = createLogger({ level: 'info', format: format.combine( @@ -25,7 +39,7 @@ const logger = createLogger({ ), transports: [ new transports.Console(), - new transports.File({ filename: logFile }) + fileTransport ] }); diff --git a/server/winston-test.js b/server/winston-test.ts similarity index 90% rename from server/winston-test.js rename to server/winston-test.ts index bfab35c..c6f69e7 100644 --- a/server/winston-test.js +++ b/server/winston-test.ts @@ -1,4 +1,4 @@ -// winston-test.js +// winston-test.ts import logger from './logger'; logger.info("✅ Winston basic test: info level");