Node.js日志在Ubuntu上的故障排查
导读:Node.js日志在Ubuntu上的故障排查指南 1. 确认日志文件位置 首先需明确Node.js日志的存储路径,避免因路径错误导致排查方向偏差。常见场景包括: 无配置/默认输出:若未指定日志路径,日志会输出到终端(标准输出/标准错误)。...
Node.js日志在Ubuntu上的故障排查指南
1. 确认日志文件位置
首先需明确Node.js日志的存储路径,避免因路径错误导致排查方向偏差。常见场景包括:
- 无配置/默认输出:若未指定日志路径,日志会输出到终端(标准输出/标准错误)。若通过
node app.js > app.log 2> & 1重定向,日志会保存在当前目录的app.log中。 - PM2管理应用:使用PM2时,日志默认存储在
~/.pm2/logs/目录,文件名格式为< app_name> -err.log(错误日志)和< app_name> -out.log(输出日志)。 - 系统日志:若应用作为系统服务运行,日志可能被
journald捕获,可通过/var/log/syslog或/var/log/messages查看(部分系统可能需通过journalctl访问)。 - 自定义路径:若通过代码(如
winston、log4js)或环境变量(如LOG_PATH=/var/log/myapp.log)指定了路径,需检查对应目录。
2. 检查日志文件权限
若日志文件无法写入,需确认Node.js进程对目标目录/文件有足够权限:
- 查看日志文件权限:
ls -l /path/to/logfile.log(需替换为实际路径)。 - 修改文件所有权(若进程以
node用户运行):sudo chown node:node /path/to/logfile.log。 - 修改文件权限(允许写入):
sudo chmod 644 /path/to/logfile.log(或755针对目录)。 - 若日志目录不存在,需先创建并设置权限:
sudo mkdir -p /var/log/myapp & & sudo chown node:node /var/log/myapp。
3. 验证日志库配置
若使用winston、morgan等日志库,需检查配置是否正确:
- 日志级别设置:确保日志级别符合需求(如
error级别仅记录错误,info记录常规信息)。例如,winston配置中level: 'info'会记录info及以上级别日志,level: 'error'仅记录错误。 - 传输配置:检查
transports是否指向正确路径(如new winston.transports.File({ filename: '/var/log/myapp.log' } )),并确认路径存在且可写。 - 环境变量覆盖:若通过环境变量(如
LOG_LEVEL)设置级别,需确保启动应用时正确传递(如LOG_LEVEL=debug node app.js)。
4. 排查进程管理工具问题
若使用pm2、systemd等工具管理Node.js进程,需检查工具本身是否正常:
- PM2问题:若
pm2 logs无法查看日志,尝试重启PM2(pm2 restart all)或重新加载配置(pm2 reload all)。若进程未启动,使用pm2 start app.js启动并检查状态(pm2 status)。 - Systemd问题:若通过
systemctl管理,检查服务状态(sudo systemctl status my-nodejs-app),查看是否有启动错误。日志可通过journalctl -u my-nodejs-app -f实时查看(-f表示跟随最新日志)。
5. 分析日志内容
获取日志文件后,通过以下方式快速定位问题:
- 过滤错误日志:使用
grep命令提取错误信息(如grep 'ERROR' /var/log/myapp.log或grep -i 'error' ~/.pm2/logs/myapp-err.log)。 - 查看HTTP请求日志:若使用
morgan中间件,可通过access.log查看请求状态码(如grep '404' access.log查找未找到资源,grep '500' access.log查找服务器错误)。 - 检查堆栈跟踪:错误日志中的堆栈信息(如
Error: Cannot find module 'express')能直接指向问题根源(如缺失依赖)。
6. 检查依赖与环境
确保环境配置正确,避免因依赖或环境问题导致日志异常:
- 依赖完整性:运行
npm install或yarn install安装所有依赖,避免因缺失模块导致日志记录失败。 - Node.js版本:使用
node -v检查版本,过旧版本可能存在日志库兼容性问题,建议升级到最新的LTS版本(如18.x)。 - 环境变量:确认所有必要环境变量(如
NODE_ENV=production、DATABASE_URL)已正确设置(可通过echo $VARIABLE_NAME查看)。
7. 处理日志轮转
当日志文件过大时,需配置日志轮转以避免磁盘空间耗尽:
- 使用
winston-daily-rotate-file:安装库(npm install winston-daily-rotate-file),配置每日轮转(如new winston.transports.DailyRotateFile({ filename: '/var/log/myapp-%DATE%.log', datePattern: 'YYYY-MM-DD', zippedArchive: true, maxSize: '20m', maxFiles: '14d' } ))。 - 使用
logrotate工具:创建/etc/logrotate.d/myapp配置文件,内容如下:
该配置表示每日轮转,保留14天压缩日志,创建新日志时设置权限为644、所有者为/var/log/myapp.log { daily rotate 14 compress missingok notifempty create 644 node node }node。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Node.js日志在Ubuntu上的故障排查
本文地址: https://pptw.com/jishu/737249.html
