在 Ubuntu 上配置 Node.js 日志,通常分为 应用层日志 和 系统层日志 两部分。下面按常见场景给你一套完整、可落地的配置方案。
npm install winston
const winston = require('winston');
const path = require('path');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.File({
filename: path.join(__dirname, 'logs/error.log'),
level: 'error'
}),
new winston.transports.File({
filename: path.join(__dirname, 'logs/combined.log')
})
]
});
// 开发环境额外输出到控制台
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
module.exports = logger;
const logger = require('./logger');
logger.info('服务启动');
logger.error('数据库连接失败');
npm install winston-daily-rotate-file
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
dirname: 'logs',
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d'
});
logger.add(transport);
✅ 优点:
npm install -g pm2
pm2 start app.js --name my-api
pm2 logs
pm2 logs my-api
pm2 logs my-api --lines 100
~/.pm2/logs/
✅ PM2 自动管理:
pm2 install pm2-logrotate
配置示例:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
sudo nano /etc/systemd/system/node-app.service
[Unit]
Description=Node.js App
After=network.target
[Service]
ExecStart=/usr/bin/node /var/www/app/app.js
Restart=always
User=ubuntu
Environment=NODE_ENV=production
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start node-app
sudo systemctl enable node-app
journalctl -u node-app -f
✅ 优点:
sudo mkdir -p /var/log/node
sudo chown ubuntu:ubuntu /var/log/node
在代码中:
filename: '/var/log/node/app.log'
| 场景 | 推荐 |
|---|---|
| Node 日志 | winston + daily-rotate |
| 进程管理 | PM2 |
| 系统日志 | journalctl |
| 日志存储 | /var/log/node |
✅ 新手 / 小项目
✅ 生产环境
✅ 企业级
如果你愿意,可以告诉我:
我可以帮你定制一套 完整 Node.js 日志架构。