在 Node.js 项目中,Linux 日志配置通常包含两部分:
下面按「最常见、最实用」的方式给你一个完整配置示例。
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: '/var/log/nodejs/app-error.log',
level: 'error'
}),
new winston.transports.File({
filename: '/var/log/nodejs/app.log'
}),
new winston.transports.Console()
]
});
module.exports = logger;
使用:
const logger = require('./logger');
logger.info('服务启动');
logger.error('出错了');
sudo mkdir -p /var/log/nodejs
sudo chown -R node:node /var/log/nodejs
(如果是 root 运行可忽略)
npm install -g pm2
pm2 start app.js --name my-app
PM2 默认日志位置:
~/.pm2/logs/my-app-out.log
~/.pm2/logs/my-app-error.log
查看日志:
pm2 logs
sudo vim /etc/systemd/system/node-app.service
[Unit]
Description=Node.js App
After=network.target
[Service]
User=node
WorkingDirectory=/opt/node-app
ExecStart=/usr/bin/node app.js
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=node-app
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start node-app
sudo systemctl enable node-app
journalctl -u node-app -f
sudo vim /etc/logrotate.d/node-app
/var/log/nodejs/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
测试:
sudo logrotate -d /etc/logrotate.d/node-app
| 场景 | 推荐 |
|---|---|
| 小项目 | winston + 控制台 |
| 中大型 | winston + PM2 |
| 生产服务 | winston + systemd + logrotate |
| 微服务 | winston + ELK / Loki |
如果你愿意,可以告诉我:
我可以直接给你一套可直接用的配置。