ubuntu

Ubuntu上Node.js日志如何进行错误追踪

小樊
50
2025-09-26 20:14:45
栏目: 编程语言

Ubuntu上Node.js日志错误追踪的完整流程

一、基础错误日志查看方法

1. 查看Ubuntu系统日志

Ubuntu的系统日志会记录Node.js进程的底层错误(如端口冲突、权限问题),主要存储在/var/log目录下。常用命令包括:

2. 使用journalctl查看进程级日志

若Node.js作为systemd服务运行(如通过systemctl start your-node-service启动),可通过journalctl命令过滤服务相关日志:

journalctl -u your-nodejs-service-name -t "node"  # -u指定服务名,-t过滤"node"标签

该命令会显示服务的实时错误日志(如进程崩溃、未捕获异常),适合生产环境的服务级监控。

3. 查看应用自身日志文件

若应用代码中配置了日志输出(如重定向到文件),可直接查看指定日志文件。例如,若启动命令为:

node app.js > logs/app.log 2>&1 &  # 将标准输出和错误输出重定向到logs/app.log

则可通过以下命令实时跟踪错误日志:

tail -f logs/app.log  # 实时显示日志末尾新增内容

或搜索特定错误关键词(如"Error"):

grep -i "Error" logs/app.log  # -i忽略大小写,筛选含"Error"的行

二、进阶:使用进程管理器增强错误追踪

1. 使用PM2管理进程与日志

PM2是Node.js常用的进程管理器,能自动重启崩溃的进程,并集中管理日志。安装与使用步骤:

三、代码层错误处理与日志记录

1. 配置专业的日志库(以Winston为例)

内置console模块无法满足生产环境需求,推荐使用Winston(功能丰富)或Bunyan(结构化日志)记录错误。以Winston为例:

2. 关键位置记录错误日志

四、优化错误追踪的实用技巧

1. 使用结构化日志

将日志格式化为JSON(如Winston的json()格式化),便于后续用ELK Stack、Graylog等工具分析。例如:

{
  "level": "error",
  "message": "数据库连接失败",
  "timestamp": "2025-09-26T10:00:00Z",
  "database": "mysql",
  "error": "Connection refused"
}

结构化日志能快速筛选、聚合错误信息,提升分析效率。

2. 日志轮转避免文件过大

使用winston-daily-rotate-file插件自动分割日志文件(如按天分割),避免单个日志文件过大:

const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
  filename: 'logs/application-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxSize: '20m', // 单个文件最大20MB
  maxFiles: '14d', // 保留14天日志
});

const logger = winston.createLogger({
  transports: [transport],
});

3. 集成第三方日志服务

将日志发送到Sentry、Loggly等平台,实现实时报警与远程分析:

五、常见错误排查步骤

  1. 端口占用:若错误为"EADDRINUSE",用sudo lsof -i :3000查看占用进程,用kill -9 <PID>终止进程;
  2. 依赖缺失:若错误为"Module not found",用npm install missing-module安装缺失依赖;
  3. 环境变量未设置:若错误为"process.env.DB_URL is undefined",用export DB_URL=your_url设置环境变量;
  4. 代码逻辑错误:若错误为"TypeError"或"ReferenceError",检查代码中的变量定义与类型使用。

0
看了该问题的人还看了