在Ubuntu系统上为Node.js应用设置日志记录策略,需围绕日志库选择、日志级别控制、日志轮转、结构化日志、异步记录及监控等核心环节展开,以下是具体步骤:
Node.js生态中有多个成熟的日志库,可根据需求选择:
npm install winston
根据环境(开发/生产)设置不同日志级别,避免记录无关信息影响性能:
debug或verbose,输出详细信息便于调试;warn或error,仅记录关键问题。const logLevel = process.env.LOG_LEVEL || 'info'; // 默认info
const logger = winston.createLogger({ level: logLevel });
启动应用时指定环境变量:export LOG_LEVEL=debug
node app.js
config.json):{ "logLevel": "debug" }
代码中读取:const config = require('./config.json');
const logger = winston.createLogger({ level: config.logLevel });
防止日志文件过大占用磁盘空间,可使用Winston插件或Ubuntu系统工具:
npm install winston-daily-rotate-file
配置:const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = createLogger({
level: 'info',
format: format.combine(format.timestamp(), format.json()),
transports: [
new DailyRotateFile({
filename: '/var/log/nodejs/app-%DATE%.log', // 日志路径(带日期后缀)
datePattern: 'YYYY-MM-DD', // 按天分割
zippedArchive: true, // 压缩旧日志
maxSize: '20m', // 单个文件最大20MB
maxFiles: '14d' // 保留14天
}),
new DailyRotateFile({
filename: '/var/log/nodejs/app-error-%DATE%.log',
datePattern: 'YYYY-MM-DD',
level: 'error', // 仅记录error级别日志
zippedArchive: true,
maxFiles: '30d'
})
]
});
/etc/logrotate.d/nodejs:/var/log/nodejs/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
systemctl restart your-node-app.service # 可选:重启应用以释放文件句柄
endscript
}
采用JSON格式记录日志,便于后续用ELK(Elasticsearch+Logstash+Kibana)、Graylog等工具分析。
Winston示例:
const logger = winston.createLogger({
format: format.combine(
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), // 添加时间戳
format.json() // 输出JSON
),
transports: [new transports.Console(), new transports.File({ filename: 'combined.log' })]
});
日志输出示例:
{
"timestamp": "2025-10-09 10:00:00",
"level": "info",
"message": "Application started"
}
确保日志记录不阻塞主线程,提升应用性能。Winston、Pino等库均默认支持异步,无需额外配置。
使用PM2管理Node.js进程时,可借助其内置日志功能:
ecosystem.config.js设置:module.exports = {
apps: [{
name: 'my-app',
script: 'app.js',
env: {
NODE_ENV: 'production',
LOG_LEVEL: 'info'
},
log_date_format: 'YYYY-MM-DD HH:mm Z', // 日志时间格式
merge_logs: true // 合并多进程日志
}]
};
启动应用:pm2 start ecosystem.config.js --env production
集成监控工具实时分析日志,设置警报规则:
cron定时分析日志文件,如统计错误次数超过阈值时发送邮件。sudo chown -R root:adm /var/log/nodejs/
sudo chmod -R 640 /var/log/nodejs/*.log
winston-mask等库自动屏蔽敏感字段。通过以上步骤,可在Ubuntu系统上为Node.js应用构建一个高效、可维护、安全的日志记录策略,满足不同环境的监控与分析需求。