CentOS 环境下 Node.js 日志常见问题与排查清单
一 定位与查看日志
- 确认日志路径:常见位置为项目目录下的 logs/,或系统日志目录 /var/log/(如由 systemd 托管时位于 journald)。不清楚路径时,优先查阅项目配置或启动脚本。
- 实时查看与检索:
- 实时跟踪:tail -f /path/to/app.log
- 关键字筛选:grep -i “error|exception” /path/to/app.log
- 分页查看:less /path/to/app.log
- 若为服务进程,优先用 journalctl 查看:
- 查看全部:journalctl -u your-node-app.service -f
- 按时间:journalctl -u your-node-app.service --since “2026-01-06 00:00:00”
- 若日志分散(访问日志、错误日志、业务日志),分别定位后再聚合分析。
二 日志过大与轮转清理
三 日志级别与输出配置
- 运行时动态控制:通过环境变量设置日志级别,便于在不改代码的情况下调整输出量。
- 启动示例:LOG_LEVEL=debug node your-app.js
- 常用日志库配置要点:
- winston:可按级别输出到不同文件(如 error 单独落盘)。
const winston = require('winston');
const logger = winston.createLogger({
level: process.env.LOG_LEVEL || 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
- morgan(Express):HTTP 请求日志格式选择(如 combined、dev 等)。
const morgan = require('morgan');
app.use(morgan('combined'));
- 建议:生产默认 info,排障时临时切到 debug;按级别分流(error 单独文件、全量 combined)便于检索与告警。
四 常见报错与快速修复
- 依赖与语法:
- 检查运行时:node -v、npm list
- 安装依赖:npm install
- 语法/规范:使用 ESLint 或编辑器语法检查
- 资源与端口:
- 端口冲突:用 netstat -tulpen | grep :PORT 或 ss -ltnp | grep :PORT 查找占用并释放
- 路径与权限:
- 文件路径大小写、相对/绝对路径是否正确
- 日志目录权限是否允许 Node.js 进程写入(如属主 node:node、权限 640)
- 运行输出与调试:
- 应用内使用 console.error()/logger.error() 输出堆栈
- 结合 tail -f 实时观察,必要时用 Node.js 调试器或 Chrome DevTools 定位
五 分析与监控进阶
- 结构化与检索:
- 使用 winston/pino 输出 JSON,便于 grep/awk/sed 分析与后续接入 ELK(Elasticsearch, Logstash, Kibana)/Splunk
- 可视化与告警:
- 搭建 ELK 或 Grafana + Loki/Prometheus 做日志可视化与阈值告警
- 备份策略:
- 周期性打包归档:tar -czvf logs_$(date +%F).tar.gz /path/to/logs
- 增量同步到备份机:rsync -avz /path/to/logs backup:/backup/location
- 安全合规:
- 限制日志文件访问权限,避免泄露 token/密码;敏感字段脱敏后再写入