Debian 环境下 JavaScript 日志查询与定位
一 定位日志来源与路径
- 先确认日志来自哪类组件:前端(浏览器)、Node.js 后端、或 Nginx/Apache 等 Web 服务器。
- 常见路径与用途一览:
- 系统与服务日志:/var/log/syslog、journalctl -u (适用于 systemd 管理的服务)
- Node.js 应用:标准输出/错误(stdout/stderr),或由日志库写入自定义文件
- Web 服务器:/var/log/nginx/access.log、/var/log/nginx/error.log、/var/log/apache2/access.log、/var/log/apache2/error.log
- 快速判断示例:
- 前端 JS 错误优先在浏览器开发者工具 Console 面板查看
- Node.js 服务:检查进程是否由 systemd 托管并查看服务日志
- 反向代理/静态资源问题:查看 Nginx/Apache 错误日志
二 命令行快速检索与过滤
- 基础查看与检索
- 查看文件:cat /path/file.log、less -S /path/file.log
- 关键字搜索:grep -i ‘error’ /path/file.log
- 多关键字:grep -E ‘error|warn|exception’ /path/file.log
- 实时跟踪:tail -f /path/file.log
- 时间与范围
- 按时间过滤(systemd):journalctl -u myapp --since “2025-12-24 00:00:00” --until “2025-12-24 12:00:00”
- 上下文与统计
- 上下文:grep -C 5 ‘error’ file.log(前后各 5 行)
- 计数:grep -c ‘timeout’ file.log
- 结构化日志(JSON)
- 提取字段:jq -r ‘.level + " " + .msg’ app.log
- 条件过滤:jq ‘select(.level==“error”) | .msg’ app.log
- 实用组合示例
- 实时查看 Node.js 服务最近 100 行并高亮错误:journalctl -u myapp -n 100 -f | grep --color=auto -i ‘error’
- 统计 Nginx 错误日志中 5xx 数量:grep -E ’ 5[0-9]{2} ’ /var/log/nginx/error.log | wc -l
- 查看某时间段的 JS 异常并输出堆栈所在行:grep -n -A 10 -B 2 ‘Exception’ app.log
三 常见场景与命令清单
- Node.js 后端
- 直接输出到文件或分离错误流:
- 仅标准输出:node app.js > app.log 2>/dev/null
- 分离错误:node app.js > app.log 2> error.log
- 同时捕获:node app.js > app.log 2>&1
- 查看服务日志:journalctl -u myapp -f
- Nginx/Apache
- Nginx 错误定位:tail -f /var/log/nginx/error.log | grep -i ‘js’
- Apache 访问与错误:tail -f /var/log/apache2/error.log
- 前端 JS 错误
- 浏览器开发者工具 Console 查看报错与堆栈
- 若通过 Node.js 渲染/服务端日志输出前端错误,按 Node.js 方式检索
四 查询性能与维护优化
- 日志轮转与保留
- 使用 logrotate 控制单文件大小与保留天数,避免超大文件拖慢检索
- 示例(/etc/logrotate.d/myapp):
- /var/log/myapp/*.log { daily; rotate 7; compress; delaycompress; missingok; notifempty; create 640 root adm }
- 查询效率
- 缩小时间窗口与关键词范围,避免全量扫描
- 采用结构化日志(JSON),便于 jq 快速过滤与聚合
- 大流量场景引入集中式方案(如 ELK Stack)做索引与全文检索
- 运行与资源监控
- 实时资源与进程:top、ps aux
- 内核与启动信息:dmesg
- 存储与系统
- 优先 SSD 存储日志目录,提升 I/O 性能
- 设置合理的保留策略与监控告警,防止磁盘被占满