在 Linux 下使用 Node.js 时,“日志怎样报错”通常可以从如何输出错误日志、如何记录错误、以及常见报错方式几个角度来理解。下面按常见场景说明。
console.errorconsole.error('发生错误:', err);
throw new Error('出错了');
try {
JSON.parse('abc');
} catch (err) {
console.error('解析失败:', err.message);
}
somePromise()
.catch(err => {
console.error('Promise 错误:', err);
});
async function run() {
try {
await doSomething();
} catch (err) {
console.error('异步错误:', err);
}
}
process.on('uncaughtException', err => {
console.error('未捕获异常:', err);
});
process.on('unhandledRejection', err => {
console.error('未处理的 Promise 拒绝:', err);
});
⚠️ 生产环境建议在捕获后优雅退出或写日志
const fs = require('fs');
fs.appendFileSync('/var/log/node/app.log', `${new Date()} 错误: ${err}\n`);
winstonpinolog4js示例(winston):
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: '/var/log/node/app.log' })
]
});
logger.error('数据库连不上');
node app.js
node app.js > /var/log/node/app.log 2>&1 &
# /etc/systemd/system/node-app.service
[Service]
ExecStart=/usr/bin/node /opt/app/app.js
StandardOutput=syslog
StandardError=syslog
查看日志:
journalctl -u node-app -f
Error: Cannot find moduleECONNREFUSEDTypeError: xxx is not a functionSyntaxError: Unexpected token如果你有具体场景(如 Express、PM2、Docker、systemd、生产环境),可以告诉我,我可以给你更针对性的日志报错方案。