在 Ubuntu 上开启或配置 Node.js 日志,取决于你是想看 Node.js 本身的运行日志,还是 Node.js 应用的业务日志。下面按常见场景给你一个完整说明。
console.log / console.error(最简单)Node.js 默认会把日志输出到 标准输出 / 标准错误:
node app.js
console.log() → stdoutconsole.error() → stderr查看方式:
node app.js > app.log 2>&1
winston(最常用)pino(性能最好)morgan(HTTP 请求日志)npm install winston
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('服务启动');
logger.error('出错了');
日志文件会生成在当前目录。
如果你用 PM2 运行 Node.js,日志是自动开启的。
npm install -g pm2
pm2 start app.js --name my-app
pm2 logs
pm2 logs my-app
~/.pm2/logs/
例如:
my-app-out.log
my-app-error.log
pm2 install pm2-logrotate
如果你把 Node.js 做成系统服务:
journalctl -u your-node-service.service -f
sudo systemctl edit your-node-service
添加:
[Service]
StandardOutput=journal
StandardError=journal
如果是 Web 服务:
/var/log/nginx/access.log
/var/log/nginx/error.log
NODE_DEBUGNODE_DEBUG=* node app.js
debug 模块npm install debug
const debug = require('debug')('app');
debug('调试信息');
启动:
DEBUG=app node app.js
| 场景 | 推荐方式 |
|---|---|
| 本地开发 | console / debug |
| 生产环境 | PM2 + winston |
| 系统服务 | systemd journal |
| 高并发 | pino |
ps aux | grep node
ls ~/.pm2/logs
journalctl -f
如果你愿意,可以告诉我:
我可以给你一个 完全贴合你环境的日志配置方案。