在 Debian 上配置 Node.js 日志,通常分为应用层面日志和系统服务层面日志两部分。下面按常见场景说明。
console.log('info');
console.error('error');
日志会输出到 stdout / stderr,由运行方式决定去向。
npm install winston
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
transports: [
new winston.transports.File({ filename: '/var/log/nodejs/app.log' }),
new winston.transports.Console()
]
});
logger.info('server started');
npm install pino
const pino = require('pino');
const logger = pino({ level: 'info' });
logger.info('hello');
✅ 建议生产环境:
创建服务文件:
sudo nano /etc/systemd/system/nodeapp.service
示例:
[Unit]
Description=Node.js App
After=network.target
[Service]
User=nodeuser
WorkingDirectory=/opt/nodeapp
ExecStart=/usr/bin/node index.js
Restart=always
Environment=NODE_ENV=production
StandardOutput=append:/var/log/nodejs/app.out.log
StandardError=append:/var/log/nodejs/app.err.log
[Install]
WantedBy=multi-user.target
启用:
sudo systemctl daemon-reload
sudo systemctl enable nodeapp
sudo systemctl start nodeapp
journalctl -u nodeapp
journalctl -u nodeapp -f
Node.js 输出会自动进 systemd journal。
sudo nano /etc/logrotate.d/nodejs
示例:
/var/log/nodejs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
✅ copytruncate 适合不能重启的 Node 进程
CMD ["node", "index.js"]
日志直接输出 stdout:
docker logs -f container_name
✅ 生产环境:
console.log 乱用如果你愿意,可以告诉我:
我可以给你精确配置示例。