Node.js在CentOS中的日志管理指南
在CentOS系统中,Node.js应用的日志管理需覆盖日志记录、轮转、进程管理、集中化及清理等环节,以下是具体实施方案:
Node.js生态中有多种日志库,需根据需求选择:
PM2是Node.js进程管理工具,内置日志功能,简化了日志操作:
my-node-app):npm install pm2 -g
pm2 start app.js --name my-node-app
pm2 logs查看所有应用的实时日志;pm2 logs my-node-app查看指定应用的日志。ecosystem.config.js)设置:module.exports = {
apps: [{
name: 'my-node-app',
script: 'app.js',
log_date_format: 'YYYY-MM-DD HH:mm:ss', // 日志时间格式
out_file: '/var/log/nodejs/my-node-app-out.log', // 标准输出日志路径
error_file: '/var/log/nodejs/my-node-app-error.log', // 错误日志路径
combine_logs: true // 合并stdout和stderr
}]
};
启动时加载配置:pm2 start ecosystem.config.js。CentOS 7及以上使用journalctl管理systemd日志,可查看系统及应用日志:
journalctlmy-node-app.service),使用:journalctl -u my-node-app.service -f # -f 实时跟踪日志
grep过滤关键字,如journalctl | grep "error"查看错误日志。对于复杂场景(如分布式系统、长期存储),可使用以下工具:
日志轮转可防止日志文件过大,常用logrotate工具:
sudo yum install logrotate -y/etc/logrotate.d/下创建nodejs配置文件(如/etc/logrotate.d/nodejs),内容如下:/var/log/nodejs/*.log { # 匹配Node.js日志路径
daily # 每天轮转
rotate 7 # 保留7天日志
compress # 压缩旧日志(.gz格式)
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
create 0644 root root # 创建新日志文件,权限0644,属主root
}
sudo logrotate -d /etc/logrotate.d/nodejs(模拟运行,不实际执行);sudo logrotate -f /etc/logrotate.d/nodejs(强制立即执行)。logs文件夹(如/usr/local/app/logs/)。~/.pm2/logs/(如~/.pm2/logs/my-node-app-out.log)。filename配置)或PM2配置文件(out_file/error_file)指定,推荐存放到/var/log/nodejs/(需创建目录并设置权限)。合理设置日志级别可控制日志输出量,常见级别从低到高为:trace→debug→info→warn→error→fatal。
const logger = winston.createLogger({
level: 'info', // 设置基础级别(高于info的日志才会输出)
transports: [new winston.transports.Console()]
});
export LOG_LEVEL=debug # 开发环境输出debug日志
node app.js
代码中读取环境变量:const logLevel = process.env.LOG_LEVEL || 'info';
const logger = winston.createLogger({ level: logLevel });
ecosystem.config.js中为不同环境设置级别:env: { LOG_LEVEL: 'debug' }, // 开发环境
env_production: { LOG_LEVEL: 'error' } // 生产环境
rm -rf /var/log/nodejs/*.log # 删除所有Node.js日志文件
rotate参数设置保留天数(如rotate 7保留7天),旧日志会自动删除。通过以上步骤,可在CentOS系统中实现Node.js应用的高效日志管理,满足监控、分析与维护需求。