在 Node.js 中“导出错误日志”通常有以下几种常见方式,从最简单到生产级方案给你梳理一下。
Node.js 的报错默认输出到 stderr
node app.js 2> error.log
2>:只导出错误node app.js 2>> error.log
✅ 适合:本地调试、临时使用
process.on('uncaughtException', (err) => {
require('fs').appendFileSync(
'error.log',
`${new Date().toISOString()} ${err.stack}\n`
);
process.exit(1);
});
process.on('unhandledRejection', (reason) => {
require('fs').appendFileSync(
'error.log',
`${new Date().toISOString()} UnhandledRejection: ${reason}\n`
);
});
try {
// 业务逻辑
} catch (err) {
fs.appendFileSync('error.log', err.stack);
}
winston(最流行)npm install winston
const winston = require('winston');
const logger = winston.createLogger({
level: 'error',
transports: [
new winston.transports.File({ filename: 'error.log' })
]
});
try {
throw new Error('出错了');
} catch (err) {
logger.error(err.stack);
}
✅ 支持:
console.error + 重定向(轻量)console.error('出错了', err);
node app.js 2> error.log
docker logs container_name > error.log 2>&1
pm2 logs --err > error.log
| 场景 | 推荐方式 |
|---|---|
| 本地调试 | 2> error.log |
| 小项目 | fs.appendFile |
| 生产项目 | winston / pino |
| 容器环境 | stdout/stderr + 日志采集 |
如果你愿意,我可以:
你现在的 Node 项目是哪种?