在 Ubuntu 上配置 Node.js 日志,通常分为 应用层日志 和 系统层日志 两部分。下面按常见场景给你一个完整说明。
npm install winston
logger.js)const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
// 控制台输出
new winston.transports.Console(),
// 普通日志
new winston.transports.File({ filename: 'logs/app.log' }),
// 错误日志
new winston.transports.File({ filename: 'logs/error.log', level: 'error' })
]
});
module.exports = logger;
const logger = require('./logger');
logger.info('服务启动成功');
logger.error('数据库连接失败');
✅ 日志文件会生成在:
your-project/logs/app.log
your-project/logs/error.log
npm install pino pino-pretty
const pino = require('pino');
const logger = pino({
transport: {
target: 'pino-pretty'
}
});
logger.info('Hello Pino');
winston-daily-rotate-filenpm install winston-daily-rotate-file
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
dirname: 'logs',
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d'
});
✅ 效果:
npm install -g pm2
pm2 start app.js --name my-api
pm2 logs
pm2 logs my-api
~/.pm2/logs/
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
✅ 自动按大小切割日志
[Unit]
Description=Node.js App
After=network.target
[Service]
ExecStart=/usr/bin/node /var/www/app/app.js
WorkingDirectory=/var/www/app
Restart=always
StandardOutput=append:/var/log/node/app.log
StandardError=append:/var/log/node/error.log
[Install]
WantedBy=multi-user.target
sudo mkdir -p /var/log/node
sudo chown -R youruser:youruser /var/log/node
sudo systemctl daemon-reload
sudo systemctl start my-node-app
sudo systemctl enable my-node-app
journalctl -u my-node-app -f
✅ 推荐组合:
/var/log/yourapplogs/
*.log
| 场景 | 推荐 |
|---|---|
| 本地开发 | pino / morgan |
| 小型服务器 | PM2 + winston |
| 生产环境 | systemd + winston |
| 高并发 | pino |
如果你愿意,可以告诉我:
我可以帮你写一套 完整可用的日志配置示例。