# 日志管理 --- ## 日志位置总览 | 日志类型 | 来源容器 | 查看方式 | 说明 | |---------|---------|---------|------| | 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` |