使用tail -f命令实时监控Node.js日志文件的最新内容(如app.log、error.log或项目logs目录下的文件),可及时发现新出现的错误信息,避免错过实时异常。例如:
tail -f /path/to/your/app.log # 实时查看应用日志
tail -f /var/log/nodejs/error.log # 实时查看系统日志目录下的Node.js错误日志
若使用pm2管理Node.js进程,可通过pm2 logs命令查看所有应用的实时日志(包括错误日志)。
通过grep命令过滤日志中的error、exception等关键字,快速提取与错误相关的日志条目。例如:
grep -i 'error' /path/to/your/app.log # 不区分大小写筛选error日志
grep 'exception' /var/log/nodejs/error.log # 筛选包含exception的日志
结合管道符可进一步细化筛选,如cat app.log | grep 'error' | grep 'database'(同时包含“error”和“database”的日志)。
日志中的错误堆栈跟踪(stack trace)是定位代码错误的关键,它会显示错误发生的文件路径、行号及调用链。例如:
Error: Cannot read property 'name' of undefined
at UserController.getUser (/home/user/project/controllers/user.js:25:12)
at Layer.handle [as handle_request] (/home/user/project/node_modules/express/lib/router/layer.js:95:5)
at next (/home/user/project/node_modules/express/lib/router/route.js:144:14)
通过堆栈信息可直接定位到user.js文件的第25行(UserController.getUser方法),快速查看该行代码的逻辑问题。
npm install或yarn install确保所有依赖项已正确安装,缺失或版本冲突的依赖可能导致运行时错误。echo $VARIABLE_NAME(如echo $NODE_ENV、echo $DATABASE_URL)检查必要环境变量是否设置,未配置的环境变量会导致应用无法正常启动。sudo netstat -tuln | grep :3000(替换为你的应用端口)检查端口是否被其他进程占用,若被占用可通过kill -9 <PID>终止进程或修改应用端口。若日志信息不足以定位问题,可使用Node.js内置调试工具或第三方工具:
node --inspect app.js启动调试模式,然后在Chrome浏览器中打开chrome://inspect,连接调试端口即可实时查看变量值、调用堆栈及代码执行流程。launch.json文件(添加"type": "node", "request": "launch", "program": "${workspaceFolder}/app.js"),通过IDE的调试面板进行断点调试,更直观地排查代码逻辑错误。对于大型应用或分布式系统,可使用ELK Stack(Elasticsearch+Logstash+Kibana)、Graylog或Fluentd等工具,实现日志的集中收集、搜索、可视化及告警。这些工具可快速聚合多台服务器的日志,通过关键词、时间范围、日志级别等多维度筛选,提升复杂日志的分析效率。
合理配置日志级别(如error、warn、info、debug),生产环境中建议仅记录error和warn级别日志,避免日志文件过大。优先处理error级别的日志(如崩溃、未捕获异常),再分析warn级别的潜在问题(如连接超时、资源不足)。
通过以上方法,可快速从Ubuntu Node.js日志中定位代码错误,缩短问题排查时间。需注意的是,良好的日志记录实践(如结构化日志、上下文信息)是高效排查问题的前提,建议在开发阶段就规范日志输出。