Debian 环境下 JS 日志的推荐存放位置与做法
先明确运行环境
- 客户端 JS(浏览器)日志通常不在服务器上,需通过前端埋点或浏览器控制台收集,无法也不应写入服务器文件系统。
- 服务端 JS 主要指 Node.js 应用,日志位置取决于你的输出方式与部署形态(直接写文件、输出到控制台由 systemd 捕获、或发送到集中式日志系统)。
推荐的存放位置
- 使用 systemd 服务 运行 Node.js:优先写入 journald(不落地文件),通过 journalctl -u your-app.service 查询;如需落盘,可在服务单元中由 systemd 重定向到 /var/log/yourapp.log(由服务运行用户拥有,便于集中管理)。
- 直接以进程方式运行:将日志写入 /var/log/yourapp/(例如 /var/log/yourapp/app.log、/var/log/yourapp/error.log),便于与系统日志分区、统一权限与备份策略。
- 作为 Web 服务(如 Express 通过 morgan 输出访问日志):遵循 Web 服务器约定,写入 /var/log/yourapp/access.log,错误日志写入 /var/log/yourapp/error.log,与 Nginx/Apache 的日志目录风格保持一致,便于排障与归档。
- 集中式日志:不落地或少量本地落盘,使用 rsyslog 将日志发往 /var/log/remote/yourapp.log 或直接发送到 Graylog/ELK,便于检索、告警与可视化。
目录与权限示例
- 建议目录结构:
- 应用专属:/var/log/yourapp/(权限如 750,属主 root:adm 或应用运行用户与组)
- 集中转发缓冲:/var/log/remote/(权限 750,属主 syslog:adm)
- 示例(systemd 服务片段):
- StandardOutput=append:/var/log/yourapp/app.log
- StandardError=append:/var/log/yourapp/error.log
- 配合创建目录与权限:mkdir -p /var/log/yourapp && chown appuser:adm /var/log/yourapp && chmod 750 /var/log/yourapp
日志轮转与保留
- 使用 logrotate 管理应用日志(创建 /etc/logrotate.d/yourapp):
- 示例:
- /var/log/yourapp/*.log {
- daily
- missingok
- rotate 14
- compress
- delaycompress
- notifempty
- create 640 appuser adm
- postrotate
- systemctl reload yourapp.service >/dev/null 2>&1 || true
- endscript
- }
- 若主要使用 journald,用 journalctl 控制保留:
- 查看占用:journalctl --disk-usage
- 按时间保留:journalctl --vacuum-time 7d
- 按容量保留:journalctl --vacuum-size 500M
快速排查与定位
- 已知 systemd 服务名:journalctl -u nodejs-app.service -f
- 已知日志文件:tail -f /var/log/yourapp/app.log;错误筛选:grep -i error /var/log/yourapp/*.log
- 若输出进了系统日志:grep -i “node|yourapp” /var/log/syslog
- 集中式方案:在 Graylog/ELK 按应用名与主机建立索引与仪表板,便于跨主机聚合分析。