Node.js应用的日志通常分布在以下位置,需先明确日志存储路径:
node app.js时,错误信息会打印在终端;/var/log/nodejs/<app_name>.log、项目目录下的logs/文件夹或app.log(需根据项目配置确认);/var/log/syslog或journalctl(若使用systemd)查看系统级日志;pm2 logs)。tail -f /path/to/logfile.log(如tail -f /var/log/nodejs/app.log)实时跟踪日志更新;grep命令筛选特定错误(如grep "ERROR" /var/log/syslog或grep "UncaughtException" app.log),快速定位关键信息;journalctl -u nodeapp.service(若应用以systemd服务运行)查看系统层日志,或dmesg | grep node查看内核相关日志。根据日志中的错误类型(如SyntaxError、ReferenceError、EADDRINUSE等),针对性解决:
Error: listen EADDRINUSE: address already in use :::3000。sudo lsof -i :3000找出占用端口的进程,用kill -9 PID终止进程;或修改应用端口(如const port = process.env.PORT || 3001)。Error: Cannot find module 'express'。npm install或yarn install安装缺失依赖。SyntaxError: Unexpected token }。UncaughtException: Error: Database connection failed。process.on('uncaughtException', (err) => { console.error(err); process.exit(1); })),避免应用崩溃,并记录错误日志。UnhandledPromiseRejectionWarning: Error: Request timeout。.catch()(如fetch(url).then(res => res.json()).catch(err => console.error(err))),或用process.on('unhandledRejection', (reason, promise) => { console.error(reason); })捕获全局未处理拒绝。Error: EACCES: permission denied, open '/var/log/app.log'。chmod调整文件权限(如sudo chmod 666 /var/log/app.log)或chown修改文件所有者(如sudo chown $USER:$USER /var/log/app.log),确保Node.js进程有访问权限。node --inspect-brk app.js启动调试模式,打开Chrome浏览器访问chrome://inspect,点击“为Node打开专用DevTools”,可设置断点、查看变量、分析调用栈;.vscode/launch.json文件,配置如下:{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug App",
"program": "${workspaceFolder}/app.js",
"console": "integratedTerminal"
}
]
}
按F5启动调试,可交互式排查问题;DEBUG环境变量开启模块内部调试(如export DEBUG=* && node app.js),或配置日志库(如Winston)输出更详细的日志(包括时间戳、堆栈跟踪、请求信息)。logrotate工具避免日志文件过大(如创建/etc/logrotate.d/nodejs文件,配置/var/log/nodejs/*.log { daily rotate 7 compress missingok }),定期压缩和删除旧日志;pm2 start app.js --watch)监控应用性能(CPU、内存、请求响应时间),或使用New Relic、Sentry等工具监控错误率。通过以上步骤,可系统性地排查和解决Debian系统上Node.js应用的日志错误,确保应用稳定运行。