在 Debian 上设置 Node.js 日志,常见做法分为 应用层日志 和 系统层日志(systemd) 两部分。下面按常见场景一步步说明。
winston(最流行)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.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: '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 { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d'
});
const logger = createLogger({
format: format.combine(format.timestamp(), format.json()),
transports: [transport]
});
npm install -g pm2
pm2 start app.js --name my-app
pm2 logs
pm2 logs my-app
日志默认位置:
~/.pm2/logs/
pm2 install pm2-logrotate
常用配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
✅ 适合:
如果你用 systemd 管理 Node.js 服务:
# /etc/systemd/system/node-app.service
[Unit]
Description=Node.js App
After=network.target
[Service]
Type=simple
User=node
WorkingDirectory=/var/www/app
ExecStart=/usr/bin/node app.js
Restart=on-failure
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
journalctl -u node-app -f
✅ 优点:
| 类型 | 路径 |
|---|---|
| 应用日志 | /var/log/node-app/ |
| systemd 日志 | journalctl |
| PM2 日志 | ~/.pm2/logs/ |
确保权限正确:
sudo mkdir -p /var/log/node-app
sudo chown node:node /var/log/node-app
✅ 最佳实践
journalctl / pm2 logs如果你愿意,可以告诉我:
我可以给你一套 完整可直接用的配置方案。