在 Ubuntu 上,Node.js 本身没有专门的“日志开关”,日志是否生成、如何开启,主要取决于 你用的启动方式、框架和运行环境。下面按常见场景给你一个完整说明。
Node.js 默认就支持日志输出,不需要额外开启:
console.log('info log');
console.warn('warn log');
console.error('error log');
运行:
node app.js
如果你是用 PM2 / systemd / Docker,日志会被重定向到对应地方(见下文)。
sudo npm install -g pm2
pm2 start app.js --name my-app
pm2 logs my-app
pm2 logs my-app --lines 100
日志默认位置:
~/.pm2/logs/
pm2 startup
pm2 save
✅ 这是 Ubuntu 上最推荐的方式
sudo nano /etc/systemd/system/node-app.service
示例:
[Unit]
Description=Node.js App
After=network.target
[Service]
ExecStart=/usr/bin/node /home/ubuntu/app/app.js
Restart=always
User=ubuntu
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
✅ 日志由 systemd + journald 管理
npm install morgan
const express = require('express');
const morgan = require('morgan');
const app = express();
app.use(morgan('combined'));
app.listen(3000);
日志会输出到 stdout(可被 PM2 / systemd 捕获)
const fs = require('fs');
const path = require('path');
const logStream = fs.createWriteStream(
path.join(__dirname, 'app.log'),
{ flags: 'a' }
);
console.log = (msg) => {
logStream.write(`[LOG] ${msg}\n`);
};
⚠️ 不推荐大型项目这样写,建议用日志库
npm install winston
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('服务启动');
logger.error('出错了');
| 场景 | 推荐方式 |
|---|---|
| 本地开发 | console.log |
| Ubuntu 服务器 | PM2 |
| 生产级服务 | systemd + journald |
| Web 请求日志 | morgan |
| 复杂日志 | winston / pino |
如果你愿意,可以告诉我:
我可以 直接给你一套可用的日志配置方案 ✅