docs: 拆分 README.md 为多个子文档,README 简化为架构引导大纲

This commit is contained in:
2026-04-14 12:23:31 +08:00
parent 7758930a01
commit f98091bb54
9 changed files with 1459 additions and 1636 deletions

View File

@@ -0,0 +1,310 @@
# 日志管理
---
## 日志位置总览
| 日志类型 | 来源容器 | 查看方式 | 说明 |
|---------|---------|---------|------|
| Nginx 访问/错误日志 | `youle-nginx` | `docker logs` | HTTP 请求记录、SSL 错误 |
| API Apache 错误日志 | `youle-api` | `docker logs` | PHP Fatal Error、Apache 500 |
| API PHP 错误日志 | `youle-api` | `docker logs` | PHP Warning/Notice写入 Apache 错误流)|
| API 业务日志 | `youle-api` | Volume 文件 | `/var/www/html/logs/YYYY-MM-DD.log` |
| API source 模块日志 | `youle-api` | Volume 文件 | `/var/www/html/source/logs/` |
| DLWEB Apache 错误日志 | `youle-dlweb` | `docker logs` | PHP Fatal Error、Apache 500 |
| DLWEB 业务日志 | `youle-dlweb` | Volume 文件 | `/var/www/html/api/logs/` |
| 同步任务调试日志 | `youle-dlweb` | Volume 文件 | `/var/www/html/api/ext/debug/synchronize/YYYY-MM-DD.log` |
| 报表同步调试日志 | `youle-dlweb` | Volume 文件 | `/var/www/html/api/ext/debug/SynchronizeReportData/YYYY-MM-DD.log` |
| 自动任务调试日志 | `youle-dlweb` | Volume 文件 | `/var/www/html/api/ext/debug/autotask/YYYY-MM-DD.log` |
| syncjob 运行日志 | `youle-syncjob` | `docker logs` | curl 请求结果,每 30s 一条 |
| cronjob 调度日志 | `youle-cronjob` | `docker logs` | cron 触发记录 |
| wxserver 运行日志 | `youle-wxserver` | `docker logs` | Node.js 标准输出 |
---
## 一、查看容器标准输出日志docker logs
```bash
# 查看最近 50 行(快速概览)
docker logs --tail 50 youle-nginx
docker logs --tail 50 youle-api
docker logs --tail 50 youle-dlweb
docker logs --tail 50 youle-syncjob
docker logs --tail 50 youle-cronjob
docker logs --tail 50 youle-wxserver
# 实时跟踪日志Ctrl+C 退出)
docker logs -f youle-api
docker logs -f youle-syncjob
# 查看最近 100 行并实时跟踪
docker logs --tail 100 -f youle-dlweb
# 查看带时间戳的日志
docker logs -t --tail 50 youle-nginx
# 查看某时间段之后的日志
docker logs --since 2026-04-13T10:00:00 youle-api
docker logs --since 1h youle-syncjob # 最近 1 小时
```
### 使用 deploy.sh 快捷查看
```bash
./deploy.sh logs api
./deploy.sh logs dlweb
./deploy.sh logs syncjob
./deploy.sh logs cronjob
./deploy.sh logs nginx
./deploy.sh logs wxserver
# 加 -f 实时跟踪
./deploy.sh logs -f api
./deploy.sh logs -f syncjob
```
---
## 二、查看业务调试日志文件Volume 文件)
业务调试日志写入 Docker Volume按日期分文件`YYYY-MM-DD.log`)。
```bash
# --- API 业务日志 ---
docker exec youle-api ls -lh /var/www/html/logs/
docker exec youle-api tail -50 /var/www/html/logs/$(date +%Y-%m-%d).log
docker exec youle-api tail -f /var/www/html/logs/$(date +%Y-%m-%d).log
docker exec youle-api cat /var/www/html/logs/$(date +%Y-%m-%d).log
# --- API source 模块日志 ---
docker exec youle-api ls -lhR /var/www/html/source/logs/
docker exec youle-api tail -50 /var/www/html/source/logs/$(date +%Y-%m-%d).log
# --- DLWEB 业务日志 ---
docker exec youle-dlweb ls -lh /var/www/html/api/logs/
docker exec youle-dlweb tail -50 /var/www/html/api/logs/$(date +%Y-%m-%d).log
# --- 同步任务调试日志Synchronize.php---
docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/synchronize/
docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log
docker exec youle-dlweb tail -f /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log
# --- 报表同步调试日志SynchronizeReportData.php---
docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/SynchronizeReportData/
docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/SynchronizeReportData/$(date +%Y-%m-%d).log
# --- 自动任务调试日志autotask---
docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/autotask/
docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/autotask/$(date +%Y-%m-%d).log
```
### 一键健康检查(汇总命令)
```bash
echo '=== syncjob 容器日志最近20行==='
docker logs --tail 20 youle-syncjob
echo
echo '=== 同步调试日志最近20行==='
docker exec youle-dlweb tail -20 /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log
echo
echo '=== API 业务日志最近20行==='
docker exec youle-api tail -20 /var/www/html/logs/$(date +%Y-%m-%d).log
```
### Nginx 访问日志过滤
```bash
# 过滤 HTTP 500 错误
docker logs youle-nginx 2>&1 | grep ' 500 '
# 过滤特定 IP 的请求
docker logs youle-nginx 2>&1 | grep '客户端IP地址'
# 过滤 SSL/TLS 握手错误
docker logs youle-nginx 2>&1 | grep 'SSL_do_handshake\|no required SSL'
```
---
## 三、清除日志
### 1. 清除 Docker 容器日志stdout/stderr
```bash
# 清空单个容器的 docker logs容器保持运行不中断服务
truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-syncjob)
truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-api)
truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-dlweb)
truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-nginx)
# 一键清空所有 youle-* 容器的 docker logs
for name in youle-nginx youle-api youle-dlweb youle-wxserver youle-syncjob youle-cronjob youle-redis youle-certbot; do
logpath=$(docker inspect --format='{{.LogPath}}' $name 2>/dev/null)
[ -n "$logpath" ] && truncate -s 0 "$logpath" && echo "Cleared: $name"
done
```
### 2. 清除业务调试日志文件Volume 内)
```bash
# --- 清除 API 业务日志 ---
docker exec youle-api sh -c "find /var/www/html/logs/ -name '*.log' ! -name '$(date +%Y-%m-%d).log' -delete"
docker exec youle-api truncate -s 0 /var/www/html/logs/$(date +%Y-%m-%d).log
docker exec youle-api sh -c 'rm -f /var/www/html/logs/*.log'
# --- 清除 DLWEB 业务日志 ---
docker exec youle-dlweb sh -c "find /var/www/html/api/logs/ -name '*.log' ! -name '$(date +%Y-%m-%d).log' -delete"
docker exec youle-dlweb sh -c 'rm -f /var/www/html/api/logs/*.log'
# --- 清除同步任务调试日志 ---
docker exec youle-dlweb find /var/www/html/api/ext/debug/ -name '*.log' -mtime +30 -delete # 删 30 天前
docker exec youle-dlweb sh -c "find /var/www/html/api/ext/debug/ -name '*.log' ! -name '$(date +%Y-%m-%d).log' -delete"
docker exec youle-dlweb sh -c '
rm -f /var/www/html/api/ext/debug/synchronize/*.log
rm -f /var/www/html/api/ext/debug/SynchronizeReportData/*.log
rm -f /var/www/html/api/ext/debug/autotask/*.log
'
```
### 3. 一键清理脚本(所有日志)
将以下内容保存为服务器上的 `/opt/youle/game-docker/clear-logs.sh`
```bash
#!/bin/bash
echo '=== 清空 Docker 容器日志 ==='
for name in youle-nginx youle-api youle-dlweb youle-wxserver youle-syncjob youle-cronjob youle-redis youle-certbot; do
logpath=$(docker inspect --format='{{.LogPath}}' $name 2>/dev/null)
if [ -n "$logpath" ] && [ -f "$logpath" ]; then
truncate -s 0 "$logpath"
echo " Cleared docker log: $name"
fi
done
echo '=== 清空业务日志文件 ==='
docker exec youle-api sh -c 'rm -f /var/www/html/logs/*.log /var/www/html/source/logs/*.log 2>/dev/null; echo " Cleared api logs"'
docker exec youle-dlweb sh -c '
rm -f /var/www/html/api/logs/*.log 2>/dev/null
rm -f /var/www/html/api/ext/debug/synchronize/*.log 2>/dev/null
rm -f /var/www/html/api/ext/debug/SynchronizeReportData/*.log 2>/dev/null
rm -f /var/www/html/api/ext/debug/autotask/*.log 2>/dev/null
echo " Cleared dlweb logs"
'
echo '=== 完成 ==='
```
```bash
chmod +x /opt/youle/game-docker/clear-logs.sh
/opt/youle/game-docker/clear-logs.sh
```
---
## 四、Windows PowerShell 远程操作
> 以下命令在 **Windows PowerShell** 中执行,通过 SSH 直接读取服务器上的业务日志。
### 查看日志
```powershell
$today = (Get-Date -Format "yyyy-MM-dd")
# api/logs
ssh root@47.98.203.17 "docker exec youle-api ls -lh /var/www/html/logs/"
ssh root@47.98.203.17 "docker exec youle-api tail -50 /var/www/html/logs/$today.log"
ssh root@47.98.203.17 "docker exec youle-api cat /var/www/html/logs/$today.log"
ssh root@47.98.203.17 "docker exec youle-api tail -f /var/www/html/logs/$today.log" # 实时
# synchronize
ssh root@47.98.203.17 "docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/synchronize/"
ssh root@47.98.203.17 "docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/synchronize/$today.log"
ssh root@47.98.203.17 "docker exec youle-dlweb tail -f /var/www/html/api/ext/debug/synchronize/$today.log" # 实时
# SynchronizeReportData
ssh root@47.98.203.17 "docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/SynchronizeReportData/"
ssh root@47.98.203.17 "docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/SynchronizeReportData/$today.log"
# autotask
ssh root@47.98.203.17 "docker exec youle-dlweb ls -lh /var/www/html/api/ext/debug/autotask/"
ssh root@47.98.203.17 "docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/autotask/$today.log"
# 一键汇总(同时查看三个目录今天的日志末尾)
$today = (Get-Date -Format "yyyy-MM-dd")
ssh root@47.98.203.17 @"
echo '=== api/logs/$today.log ==='
docker exec youle-api tail -30 /var/www/html/logs/$today.log
echo
echo '=== synchronize/$today.log ==='
docker exec youle-dlweb tail -30 /var/www/html/api/ext/debug/synchronize/$today.log
echo
echo '=== SynchronizeReportData/$today.log ==='
docker exec youle-dlweb tail -30 /var/www/html/api/ext/debug/SynchronizeReportData/$today.log
"@
```
### 删除日志
```powershell
$today = (Get-Date -Format "yyyy-MM-dd")
# 清空今天的 API 业务日志(保留文件)
ssh root@47.98.203.17 "docker exec youle-api truncate -s 0 /var/www/html/logs/$today.log"
# 删除全部 API 业务日志
ssh root@47.98.203.17 "docker exec youle-api sh -c 'rm -f /var/www/html/logs/*.log'"
# 清空今天的同步调试日志
ssh root@47.98.203.17 "docker exec youle-dlweb truncate -s 0 /var/www/html/api/ext/debug/synchronize/$today.log"
# 删除 30 天前的旧调试日志
ssh root@47.98.203.17 "docker exec youle-dlweb find /var/www/html/api/ext/debug/ -name '*.log' -mtime +30 -delete"
# 一键清理api/logs + dlweb/api/ext/debug 全部日志
ssh root@47.98.203.17 @"
docker exec youle-api sh -c 'rm -f /var/www/html/logs/*.log'
docker exec youle-dlweb sh -c '
rm -f /var/www/html/api/ext/debug/synchronize/*.log
rm -f /var/www/html/api/ext/debug/SynchronizeReportData/*.log
rm -f /var/www/html/api/ext/debug/autotask/*.log
'
echo "Done"
"@
```
---
## 快捷速查表
> 以下命令在 SSH 登录服务器后直接执行。
### 查看日志
| 目标 | 命令 |
|------|------|
| nginx 访问日志末尾50行 | `docker logs --tail 50 youle-nginx` |
| nginx 访问日志(实时跟踪) | `docker logs -f youle-nginx` |
| wxserver 日志末尾50行 | `docker logs --tail 50 youle-wxserver` |
| API PHP 错误日志末尾50行 | `docker exec youle-api tail -50 /var/log/apache2/php_errors.log` |
| API 业务日志_今天末尾50行 | `docker exec youle-api tail -50 /var/www/html/logs/$(date +%Y-%m-%d).log` |
| API 业务日志_今天实时跟踪 | `docker exec youle-api tail -f /var/www/html/logs/$(date +%Y-%m-%d).log` |
| 列出 API 业务日志文件 | `docker exec youle-api ls -lh /var/www/html/logs/` |
| 同步调试日志_今天末尾50行 | `docker exec youle-dlweb tail -50 /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log` |
| 同步调试日志_今天实时跟踪 | `docker exec youle-dlweb tail -f /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log` |
| syncjob 任务日志末尾50行 | `docker logs --tail 50 youle-syncjob` |
| cronjob 任务日志末尾50行 | `docker logs --tail 50 youle-cronjob` |
### 清理日志
| 目标 | 命令 |
|------|------|
| 清空 nginx docker logs | `truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-nginx)` |
| 清空 API docker logs | `truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-api)` |
| 清空 dlweb docker logs | `truncate -s 0 $(docker inspect --format='{{.LogPath}}' youle-dlweb)` |
| 清空所有容器 docker logs | `for n in youle-nginx youle-api youle-dlweb youle-wxserver youle-syncjob youle-cronjob youle-redis youle-certbot; do truncate -s 0 $(docker inspect --format='{{.LogPath}}' $n 2>/dev/null) 2>/dev/null; done` |
| 清空今天 API 业务日志 | `docker exec youle-api truncate -s 0 /var/www/html/logs/$(date +%Y-%m-%d).log` |
| 清空今天同步调试日志 | `docker exec youle-dlweb truncate -s 0 /var/www/html/api/ext/debug/synchronize/$(date +%Y-%m-%d).log` |
| 删除 API 全部历史日志 | `docker exec youle-api sh -c 'rm -f /var/www/html/logs/*.log'` |
| 删除调试日志 30 天前旧文件 | `docker exec youle-dlweb find /var/www/html/api/ext/debug/ -name '*.log' -mtime +30 -delete` |
| 删除调试日志全部文件 | `docker exec youle-dlweb sh -c 'rm -f /var/www/html/api/ext/debug/synchronize/*.log /var/www/html/api/ext/debug/SynchronizeReportData/*.log /var/www/html/api/ext/debug/autotask/*.log'` |
| 一键清理全部日志 | `/opt/youle/game-docker/clear-logs.sh` |