feat(日志): 添加测试脚本日志文件输出并更新日志文档
添加测试脚本日志文件输出功能,创建日志目录并设置权限。同时更新README.md文档,详细说明生产环境中各类日志的查看方法和常见问题解决方案。
This commit is contained in:
193
README.md
193
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. 试运行周期任务
|
||||
|
||||
当设置一个周期任务后,您可以通过以下方式试运行任务,而不需要等待到指定的时间:
|
||||
|
||||
@@ -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="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>",
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user