在Debian系统上,Node.js应用的错误日志位置取决于应用配置,常见路径包括:
/var/log/myapp/error.log、./logs/error.log(需检查应用配置文件,如config.js、winston.js或.env中的LOG_PATH设置);/var/log/syslog或journalctl -u your-node-service(若应用以systemd服务运行)查看;node app.js),错误会直接打印在终端。使用tail命令实时跟踪日志更新,快速定位最新错误:
tail -f /path/to/your-error.log # 替换为实际日志路径
# 若日志在系统日志中,可使用:
tail -f /var/log/syslog | grep node # 过滤出Node.js相关日志
这能帮助你及时捕捉到应用崩溃或报错的瞬间信息。
Node.js错误日志通常包含以下关键信息,需逐项解析:
2025-10-12T14:30:00.123Z),用于定位问题发生时段;ERROR(致命错误)、WARN(潜在问题)、INFO(常规信息),优先关注ERROR级别;SyntaxError(语法错误)、ReferenceError(变量未定义)、TypeError(类型不匹配)、Error: listen EADDRINUSE(端口冲突)等,直接指向错误类别;Cannot find module 'express');at Object.<anonymous> (/app/server.js:10:15)),是定位代码问题的核心线索。sudo lsof -i :3000(替换为实际端口);kill -9 <PID>(PID为lsof输出的进程ID);port变量(如const port = process.env.PORT || 3001)。express、mongoose)。npm install xxx(xxx为缺失的模块名),或通过package.json的dependencies重新安装所有依赖(npm install)。babel)。/app/routes/user.js:5:10);function括号、添加缺失的const声明)。throw new Error('xxx')),会导致进程崩溃。process.on('uncaughtException', (err) => {
console.error('未捕获的异常:', err.message);
// 记录到日志文件(如使用winston)
logger.error('未捕获的异常:', err);
process.exit(1); // 强制退出,避免进程处于不稳定状态
});
reject但未用catch捕获(如Promise.reject(new Error('xxx')))。process.on('unhandledRejection', (reason, promise) => {
console.error('未处理的Promise拒绝:', reason);
// 记录到日志文件
logger.error('未处理的Promise拒绝:', reason);
// 可选择退出进程(根据业务需求)
// process.exit(1);
});
若日志信息不足以定位问题,可使用以下工具进行深度调试:
通过--inspect-brk标志启动应用,在Chrome浏览器中调试:
node --inspect-brk /path/to/your-app.js
chrome://inspect;.vscode/launch.json文件,配置调试任务:{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug Node.js",
"program": "${workspaceFolder}/app.js", // 替换为入口文件
"skipFiles": ["<node_internals>/**"]
}
]
}
F5启动调试,通过VS Code的调试面板设置断点、查看调用栈。为避免日志文件过大或丢失,建议配置日志轮转和监控:
logrotate工具自动切割日志(如每天生成一个新文件,保留7天):/etc/logrotate.d/nodejs文件,内容如下:/var/log/nodejs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 644 root root
}
pm2(进程管理工具)监控应用状态,设置错误报警:npm install pm2 -g
pm2 start /path/to/your-app.js --name "my-node-app"
pm2 install pm2-logrotate # 自动轮转日志
pm2 set pm2-logrotate:max_size 10M # 单个日志文件最大10MB
pm2 set pm2-logrotate:retain 7 # 保留7个日志文件
结合第三方监控工具(如Prometheus+Grafana、Sentry),可实现实时错误统计、报警通知(如邮件、Slack)。