在Ubuntu下优化Node.js应用程序的日志记录,可以采取以下几种策略:
选择合适的日志库:
winston、pino或bunyan,它们提供了丰富的功能和良好的性能。日志级别管理:
const winston = require('winston');
const logger = winston.createLogger({
level: process.env.NODE_ENV === 'production' ? 'warn' : 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
日志分割:
logrotate,来定期分割日志文件,避免单个日志文件过大。sudo apt-get install logrotate
然后在/etc/logrotate.d/目录下创建一个配置文件,例如nodejs:
/var/log/nodejs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 root adm
}
异步日志记录:
const pino = require('pino');
const logger = pino({
level: 'info',
transport: {
target: 'pino-pretty',
options: { colorize: true }
}
});
日志聚合和分析:
避免日志风暴:
const rateLimit = require('express-rate-limit');
const apiLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // limit each IP to 100 requests per windowMs
});
app.use('/api/', apiLimiter);
日志轮转和压缩:
logrotate -f /etc/logrotate.conf
监控和告警:
通过以上策略,你可以有效地优化Node.js应用程序在Ubuntu下的日志记录,提高系统的稳定性和可维护性。