在Debian系统中,Node.js应用的日志是故障排查的核心依据。通过合理配置、查看和分析日志,可快速定位应用错误、性能瓶颈或系统问题。以下是具体步骤和方法:
Debian的系统日志(syslog)会记录Node.js应用的启动、停止及系统级错误(如端口冲突、权限问题)。使用以下命令实时查看最新系统日志:
tail -f /var/log/syslog
若需过滤特定关键词(如“node”或“app”),可添加grep:
tail -f /var/log/syslog | grep -i "node"
这能快速定位系统层面的问题(如端口被占用、文件权限不足)。
Node.js应用通常会将日志输出到文件(如app.log)或控制台。使用tail -f实时查看应用日志:
tail -f /path/to/app.log
若应用使用console.log或日志库(如winston),日志文件会包含详细的错误信息(如未捕获异常、数据库连接失败)。例如,winston配置的error.log会集中记录错误日志,便于快速定位问题。
日志级别决定了日志的详细程度(如debug记录所有信息,error仅记录错误)。通过调整日志级别,可平衡日志量和排查效率:
LOG_LEVEL环境变量,适用于winston、morgan等库:export LOG_LEVEL=debug # 开发环境设为debug,生产环境设为info/error
node app.js
winston):const winston = require('winston');
const logger = winston.createLogger({
level: 'debug', // 可动态修改为info/warn/error
format: winston.format.json(),
transports: [new winston.transports.File({ filename: 'app.log' })]
});
config模块或log4js的配置文件(如config.json),便于统一管理不同环境的日志级别。日志文件过大(如超过1GB)会占用大量磁盘空间,影响系统性能。使用logrotate工具自动轮转日志:
logrotate:sudo apt-get install logrotate
/etc/logrotate.d/nodeapp):/path/to/app.log {
daily # 每天轮转
rotate 7 # 保留7天日志
compress # 压缩旧日志
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
copytruncate # 复制日志后清空原文件(避免重启应用)
}
定期运行sudo logrotate -f /etc/logrotate.conf可强制轮转日志。
tail -f或less +F(进入跟随模式)实时监控日志变化,快速发现异常(如频繁的500错误)。--inspect-brk启动应用,在Chrome浏览器中访问chrome://inspect进行断点调试:node --inspect-brk app.js
.vscode/launch.json文件,配置调试任务(如启动应用、附加进程),支持断点、变量查看。netstat -an | grep :3000(替换为应用端口)检查端口占用,若端口被占用,可更改应用端口或停止占用进程。chown修改目录所有者(如sudo chown -R nodeuser:nodegroup /var/log/nodeapp),使用chmod设置权限(如sudo chmod -R 755 /var/log/nodeapp)。process.on捕获未处理的异常和Promise拒绝,记录错误日志并优雅退出:process.on('uncaughtException', (error) => {
console.error('未捕获的异常:', error.message);
// 记录到日志文件
logger.error('未捕获的异常:', error);
process.exit(1); // 退出进程
});
process.on('unhandledRejection', (reason, promise) => {
console.error('未处理的拒绝:', reason);
logger.error('未处理的拒绝:', reason);
});
npm install安装所有依赖,使用npm ls检查依赖版本冲突,使用npm audit修复安全漏洞。通过以上方法,可充分利用Debian系统中的Node.js日志,快速定位和解决应用故障。关键是根据实际场景选择合适的日志级别、工具和方法,确保日志的可读性和可维护性。