在 Linux 下配置 Node.js 日志,通常有**“不用框架的写法”和“用成熟日志库”两种思路。下面按常见、实用、可落地**的方式给你讲。
console.log('info');
console.error('error');
Linux 下运行:
node app.js > app.log 2>&1
>:标准输出2>&1:错误也写进日志winstonnpm 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/node/app.log' }),
new winston.transports.Console()
]
});
logger.info('server started');
logger.error('something wrong');
const transport = process.env.NODE_ENV === 'production'
? new winston.transports.File({ filename: '/var/log/node/app.log' })
: new winston.transports.Console();
推荐:
/var/log/node/
创建并授权:
sudo mkdir -p /var/log/node
sudo chown -R youruser:youruser /var/log/node
Node 本身不切日志,用 Linux 工具:
logrotatesudo vim /etc/logrotate.d/node
示例:
/var/log/node/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
npm install -g pm2
pm2 start app.js
~/.pm2/logs/
pm2 logs
PM2 自带:
| 需求 | 方案 |
|---|---|
| 结构化日志 | winston + json |
| 高性能 | pino |
| 集中日志 | ELK / Loki / Grafana |
| 审计日志 | 单独文件 + 权限控制 |
node app.js
├── console(开发)
└── /var/log/node/app.log(生产)
如果你愿意,我可以:
你现在是哪种场景?