Files
youlegames/codes/agent/game-docker/docs/06-logging.md

311 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 日志管理
---
## 日志位置总览
| 日志类型 | 来源容器 | 查看方式 | 说明 |
|---------|---------|---------|------|
| 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` |