使用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日志中定位代碼錯誤,縮短問題排查時間。需注意的是,良好的日志記錄實踐(如結構化日志、上下文信息)是高效排查問題的前提,建議在開發階段就規范日志輸出。