在 Linux 上配置 Node.js 日志,通常可以从应用层日志库配置、系统/进程管理(PM2 / systemd)、**日志轮转(logrotate)**几个方面来做。下面给你一套常见且实用的方案。
npm 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.Console(),
new winston.transports.File({
filename: '/var/log/nodejs/app.log'
}),
new winston.transports.File({
filename: '/var/log/nodejs/error.log',
level: 'error'
})
]
});
logger.info('服务启动');
logger.error('出错了');
npm install pino
const pino = require('pino');
const logger = pino({ level: 'info' });
logger.info('hello');
一般日志放:
/var/log/nodejs/
创建并赋权:
sudo mkdir -p /var/log/nodejs
sudo chown -R youruser:youruser /var/log/nodejs
npm install -g pm2
pm2 start app.js --name myapp
PM2 默认日志位置:
~/.pm2/logs/myapp-out.log
~/.pm2/logs/myapp-error.log
pm2 start app.js \
--name myapp \
--log /var/log/nodejs/myapp.log \
--error /var/log/nodejs/myapp-error.log \
--output /var/log/nodejs/myapp-out.log
pm2 install pm2-logrotate
常用配置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
新建配置文件:
sudo vim /etc/logrotate.d/nodejs
内容示例:
/var/log/nodejs/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate
}
测试:
sudo logrotate -d /etc/logrotate.d/nodejs
如果你用 systemd 启动 Node.js:
[Unit]
Description=Node.js App
[Service]
ExecStart=/usr/bin/node /opt/app/app.js
WorkingDirectory=/opt/app
User=node
StandardOutput=append:/var/log/nodejs/app.log
StandardError=append:/var/log/nodejs/error.log
Restart=always
[Install]
WantedBy=multi-user.target
✅ Node.js + winston/pino
✅ PM2 管理进程
✅ pm2-logrotate 或 logrotate
✅ 日志统一放 /var/log/nodejs
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置文件。