在 Debian 上配置 Node.js 日志路径,通常不是 Node.js 本身统一配置,而是取决于你怎么运行 Node.js(原生 node、PM2、systemd、Docker 等)。下面按常见场景说明。
Node.js 默认不自动写日志文件,日志由代码控制。
const fs = require('fs');
const logStream = fs.createWriteStream('/var/log/myapp/app.log', { flags: 'a' });
console.log = (msg) => logStream.write(`${new Date().toISOString()} ${msg}\n`);
winston
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: '/var/log/myapp/app.log' })
]
});
pino
const pino = require('pino');
const logger = pino({ level: 'info' }, pino.destination('/var/log/myapp/app.log'));
✅ 日志路径完全由你代码决定
PM2 默认日志在:
~/.pm2/logs/
pm2 start app.js \
--log /var/log/myapp/app.log \
--error /var/log/myapp/err.log \
--output /var/log/myapp/out.log
或 ecosystem.config.js:
module.exports = {
apps: [{
name: 'myapp',
script: 'app.js',
error_file: '/var/log/myapp/err.log',
out_file: '/var/log/myapp/out.log',
log_file: '/var/log/myapp/app.log'
}]
}
[Unit]
Description=Node App
[Service]
ExecStart=/usr/bin/node /opt/myapp/app.js
WorkingDirectory=/opt/myapp
User=myapp
StandardOutput=append:/var/log/myapp/app.log
StandardError=append:/var/log/myapp/err.log
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
✅ 日志直接由 systemd 控制路径
RUN mkdir -p /var/log/myapp
docker run -v /var/log/myapp:/var/log/myapp mynodeapp
或将日志打到 stdout(推荐):
console.log('hello')
然后:
journalctl -u docker
sudo mkdir -p /var/log/myapp
sudo chown -R myapp:myapp /var/log/myapp
否则 Node 会报 EACCES
| 运行方式 | 日志路径配置位置 |
|---|---|
| 原生 node | 代码里写文件 |
| PM2 | --log / ecosystem |
| systemd | service 文件 |
| Docker | volume / stdout |
如果你告诉我:
我可以给你精确到文件的配置示例。