在 Ubuntu 上配置 Node.js 日志,一般分 应用层日志 和 系统层日志(systemd) 两部分。下面按常见场景给你讲。
常用库:
winstonpino(性能最好)log4jsnpm 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: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('服务启动');
日志文件一般放:
/var/log/myapp/
记得给目录权限:
sudo mkdir -p /var/log/myapp
sudo chown -R youruser:youruser /var/log/myapp
sudo nano /etc/systemd/system/myapp.service
内容示例:
[Unit]
Description=Node.js App
After=network.target
[Service]
User=youruser
WorkingDirectory=/home/youruser/myapp
ExecStart=/usr/bin/node /home/youruser/myapp/index.js
Restart=always
Environment=NODE_ENV=production
# 日志由 systemd 管理
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
journalctl -u myapp
journalctl -u myapp -f # 实时
journalctl -u myapp --since "1 hour ago"
tail -f /var/log/myapp/combined.log
sudo nano /etc/logrotate.d/myapp
示例:
/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
notifempty
copytruncate
}
测试:
sudo logrotate -d /etc/logrotate.d/myapp
✅ Node.js + Winston/Pino
✅ systemd 管理进程
✅ journalctl 查日志
✅ logrotate 做切割
如果你愿意,可以告诉我:
我可以直接给你一套完整配置。