Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
16 changes: 15 additions & 1 deletion server/logger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -25,7 +39,7 @@ const logger = createLogger({
),
transports: [
new transports.Console(),
new transports.File({ filename: logFile })
fileTransport
]
});

Expand Down
2 changes: 1 addition & 1 deletion server/winston-test.js → server/winston-test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// winston-test.js
// winston-test.ts
import logger from './logger';

logger.info("✅ Winston basic test: info level");
Expand Down
Loading