在 CentOS 上配置 Node.js 日志,常见场景有 应用层日志(代码里打日志) 和 系统层日志(进程 / 服务日志)。下面按实际使用方式给你一个完整说明。
winston(最主流)安装
npm install winston
基础配置示例
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
// 错误日志
new winston.transports.File({ filename: '/var/log/nodejs/error.log', level: 'error' }),
// 所有日志
new winston.transports.File({ filename: '/var/log/nodejs/combined.log' }),
// 控制台
new winston.transports.Console()
]
});
logger.info('服务启动');
logger.error('错误信息');
创建日志目录
sudo mkdir -p /var/log/nodejs
sudo chown -R $(whoami):$(whoami) /var/log/nodejs
pm2 管理日志(强烈推荐生产环境)npm install -g pm2
pm2 start app.js --name my-node-app
pm2 logs
pm2 logs my-node-app
~/.pm2/logs/
pm2 install pm2-logrotate
pm2-logrotate 常用配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
✅ 优点
rsyslogprocess.stdout.write('nodejs info message\n');
process.stderr.write('nodejs error message\n');
sudo vi /etc/rsyslog.d/nodejs.conf
内容示例:
if $programname == 'node' then /var/log/nodejs/node.log
& stop
重启 rsyslog:
sudo systemctl restart rsyslog
systemd + journalctl如果你用 systemd 管理 Node.js 服务:
sudo vi /etc/systemd/system/nodeapp.service
[Unit]
Description=Node.js App
After=network.target
[Service]
Type=simple
User=node
WorkingDirectory=/opt/nodeapp
ExecStart=/usr/bin/node app.js
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start nodeapp
sudo systemctl enable nodeapp
journalctl -u nodeapp -f
proxy_set_header X-Real-IP $remote_addr;
access_log /var/log/nginx/node_access.log;
error_log /var/log/nginx/node_error.log;
| 场景 | 推荐方案 |
|---|---|
| 小项目 | winston + 文件 |
| 中大型 | pm2 + pm2-logrotate |
| 系统服务 | systemd + journalctl |
| 云服务器 | 日志收集到 ELK / Loki |
❌ /var/log/nodejs 没权限
✅ 确保目录权限或 chown
❌ 日志无限增长
✅ 使用 pm2-logrotate 或 winston 按日期切割
❌ 日志中文乱码
✅ 设置 LANG=en_US.UTF-8
如果你愿意,可以告诉我:
我可以给你一套 完全贴合你环境的配置方案。