Logging chuẩn production cần: structured JSON, log levels, request correlation ID, không log sensitive data.
Setup Winston với nest-winston:
typescript
import { WinstonModule } from 'nest-winston';
import { transports, format } from 'winston';
WinstonModule.forRoot({
level: process.env.LOG_LEVEL || 'info',
format: format.combine(
format.timestamp(),
format.errors({ stack: true }),
format.json(), // Structured JSON cho log aggregation
),
transports: [
new transports.Console(),
new transports.File({ filename: 'error.log', level: 'error' }),
],
})Request correlation với Middleware:
typescript
app.use((req, res, next) => {
req.correlationId = req.headers['x-correlation-id'] ?? uuid();
res.setHeader('x-correlation-id', req.correlationId);
next();
});Inject Logger service và dùng this.logger.log/error/warn với context.
Pitfall: không dùng console.log trong production code — không structured, không có levels.