抓取(收集/查看)Node.js 运行日志,通常有几种常见场景和做法,下面按“从简单到生产级”给你一个清晰指南。
consoleconsole.log('普通日志');
console.error('错误日志');
console.warn('警告');
运行:
node app.js
✅ 适合:本地开发、调试
node app.js > app.log 2>&1
>:标准输出2>&1:错误也写入查看:
tail -f app.log
✅ 适合:单进程、临时使用
fs 写日志const fs = require('fs');
function log(msg) {
fs.appendFileSync('app.log', `${new Date().toISOString()} ${msg}\n`);
}
log('服务启动');
⚠️ 不推荐高频写文件(性能差)
npm install winston
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'app.log' })
]
});
logger.info('服务启动');
logger.error('出错了');
✅ 支持:
npm install pino
const pino = require('pino');
const logger = pino({ level: 'info' });
logger.info('hello');
✅ 适合:高并发服务
winston-daily-rotate-filenpm install winston-daily-rotate-file
const DailyRotateFile = require('winston-daily-rotate-file');
new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '14d'
})
docker logs -f 容器名
Node 日志直接打到 stdout 即可:
console.log / logger.info
流程:
Node.js → 日志文件 / stdout → 采集器 → 可视化
process.on('uncaughtException', err => {
logger.error('未捕获异常', err);
});
process.on('unhandledRejection', err => {
logger.error('Promise未处理', err);
});
| 场景 | 推荐方式 |
|---|---|
| 本地调试 | console |
| 小项目 | 文件重定向 |
| 正式服务 | winston / pino |
| 高并发 | pino |
| 云原生 | stdout + 日志平台 |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置方案。