From 3776de847761472a01d26c06f5cb0db303a4b3b7 Mon Sep 17 00:00:00 2001 From: xiaji Date: Sat, 17 Jan 2026 22:03:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=97=A5=E5=BF=97):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E8=84=9A=E6=9C=AC=E6=97=A5=E5=BF=97=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E8=BE=93=E5=87=BA=E5=B9=B6=E6=9B=B4=E6=96=B0=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加测试脚本日志文件输出功能,创建日志目录并设置权限。同时更新README.md文档,详细说明生产环境中各类日志的查看方法和常见问题解决方案。 --- README.md | 193 +++++++++++++++++++++++++++++++++++++++++++ test_redis_celery.py | 26 ++++++ 2 files changed, 219 insertions(+) diff --git a/README.md b/README.md index 62d1c36..d9fcb3d 100644 --- a/README.md +++ b/README.md @@ -799,6 +799,199 @@ sudo supervisorctl update sudo supervisorctl restart celery_worker celery_beat ``` +### 5.1 日志文件查看指南 + +在生产环境中,有多种日志来源,了解每种日志的位置和查看方法非常重要: + +#### 5.1.1 Celery Worker 和 Beat 日志 + +这些日志由 Celery 进程产生,需要先创建日志目录: + +```bash +# 创建日志目录 +sudo mkdir -p /var/log/celery/ + +# 设置权限 +sudo chown -R www-data:www-data /var/log/celery/ +sudo chmod -R 755 /var/log/celery/ +``` + +查看日志: +```bash +# 实时查看 Worker 日志 +tail -f /var/log/celery/worker.log + +# 实时查看 Beat 日志 +tail -f /var/log/celery/beat.log + +# 查看最近50行 +tail -n 50 /var/log/celery/worker.log + +# 搜索错误信息 +grep -i error /var/log/celery/worker.log + +# 搜索特定任务 +grep -i "generate_daily_pdf_report" /var/log/celery/worker.log +``` + +#### 5.1.2 测试脚本日志 + +运行测试脚本时,日志会同时输出到控制台和文件: + +```bash +# 运行测试脚本(输出到控制台) +python test_redis_celery.py + +# 查看测试日志文件 +tail -f /var/log/celery/test_redis_celery.log + +# 运行测试并保存到文件 +python test_redis_celery.py 2>&1 | tee /var/log/celery/test_output.log +``` + +测试脚本日志内容示例: +``` +2024-01-15 10:30:00 | INFO | 开始测试Redis连接... +2024-01-15 10:30:01 | SUCCESS | Redis连接测试通过! +2024-01-15 10:30:02 | INFO | 开始测试Celery与Redis集成... +2024-01-15 10:30:03 | SUCCESS | Celery与Redis集成测试通过! +``` + +#### 5.1.3 Redis 日志 + +Redis 的日志通常在系统日志中: + +```bash +# 查看 Redis 系统日志 +sudo journalctl -u redis-server -f + +# 查看 Redis 错误日志 +sudo tail -f /var/log/redis/redis-server.log + +# 查看所有 Redis 相关日志 +sudo grep -i redis /var/log/syslog +``` + +#### 5.1.4 Django 应用日志 + +```bash +# 查看 Django 应用日志 +tail -f /path/to/diary-family/logs/app.log + +# 查看 Gunicorn 日志 +sudo tail -f /var/log/gunicorn/access.log +sudo tail -f /var/log/gunicorn/error.log +``` + +#### 5.1.5 Nginx 日志 + +```bash +# 查看访问日志 +sudo tail -f /var/log/nginx/access.log + +# 查看错误日志 +sudo tail -f /var/log/nginx/error.log +``` + +#### 5.1.6 综合日志查看脚本 + +创建一个综合日志查看脚本: + +```bash +#!/bin/bash +# save as: /usr/local/bin/view-all-logs + +echo "=== Celery Worker Log ===" +tail -n 20 /var/log/celery/worker.log + +echo -e "\n=== Celery Beat Log ===" +tail -n 20 /var/log/celery/beat.log + +echo -e "\n=== Redis Server Log ===" +sudo tail -n 20 /var/log/redis/redis-server.log + +echo -e "\n=== Nginx Error Log ===" +sudo tail -n 20 /var/log/nginx/error.log +``` + +使用方法: +```bash +# 给脚本添加执行权限 +sudo chmod +x /usr/local/bin/view-all-logs + +# 运行脚本 +view-all-logs +``` + +#### 5.1.7 日志轮转配置 + +为防止日志文件过大,配置日志轮转: + +创建 `/etc/logrotate.d/celery-app`: +``` +/var/log/celery/*.log { + daily + missingok + rotate 14 + compress + delaycompress + notifempty + create 0640 www-data www-data + sharedscripts + postrotate + supervisorctl restart celery_worker celery_beat > /dev/null 2>&1 || true + endscript +} +``` + +启用配置: +```bash +sudo logrotate -f /etc/logrotate.d/celery-app +``` + +#### 5.1.8 日志查看常见问题 + +**问题1:日志文件权限被拒绝** +```bash +# 检查权限 +ls -la /var/log/celery/ + +# 如果权限不对,重新设置 +sudo chown -R www-data:www-data /var/log/celery/ +sudo chmod -R 755 /var/log/celery/ +``` + +**问题2:日志文件不存在** +```bash +# 检查目录是否存在 +ls -la /var/log/ | grep celery + +# 如果不存在,创建目录 +sudo mkdir -p /var/log/celery/ +sudo chown www-data:www-data /var/log/celery/ +``` + +**问题3:日志不更新** +```bash +# 检查进程是否运行 +ps aux | grep celery + +# 检查文件是否被锁定 +sudo lsof /var/log/celery/worker.log + +# 检查磁盘空间 +df -h /var/log/ +``` + +**问题4:如何清理旧日志** +```bash +# 删除7天前的日志 +find /var/log/celery/ -name "*.log.*.gz" -mtime +7 -delete + +# 清空当前日志文件(谨慎使用) +sudo truncate -s 0 /var/log/celery/worker.log +``` + ### 6. 试运行周期任务 当设置一个周期任务后,您可以通过以下方式试运行任务,而不需要等待到指定的时间: diff --git a/test_redis_celery.py b/test_redis_celery.py index 0f33743..06d79ab 100644 --- a/test_redis_celery.py +++ b/test_redis_celery.py @@ -361,14 +361,40 @@ def main(): return 1 if __name__ == "__main__": + import os + from pathlib import Path + # 配置日志 logger.remove() + + # 创建日志目录 + log_dir = Path("/var/log/celery") + log_dir.mkdir(parents=True, exist_ok=True) + + # 设置日志文件权限 + log_dir.chmod(0o755) + + # 添加控制台输出 logger.add( sys.stdout, format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}", level="INFO" ) + # 添加日志文件输出 + log_file = log_dir / "test_redis_celery.log" + logger.add( + log_file, + format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}", + level="INFO", + rotation="1 day", + retention="7 days", + encoding="utf-8" + ) + + logger.info(f"测试日志将同时输出到控制台和 {log_file}") + logger.info("=" * 60) + try: exit_code = main() sys.exit(exit_code)