uwsgi日志按天分割保存

本文介绍如何使用uwsgi配合shell脚本和crontab实现日志按天自动切割的方法,便于日志管理和历史日志查询。

最近网站被频繁的攻击,需要经常查看uwsgi日志,进行分析,查找可疑ip,进行黑名单设置;在查看uwsgi日志的时候发现uwsgi日志很大,有上百M,下载很不方面,并且打开日志和查看日志均不是很方便;

  最理想的就是每天一个日志文件,方面管理和查看。

  uwsgi没有提供按天切割日志的配置,只提供了一个log-maxsize配置,当文件达到多大的时候自动切分,对于查找历史日志还是很不方便,我们一般是按照时间查询。

  我是小白,根据网上的资料,归纳总结,并加以菜鸟备注呈现给大家;

原理就是:配合sh+crontab脚本技术,用mv+touch-logreopen参数,移动日志文件后,让uwsgi重新打开日志并记录。

系统:centos 7 (其他系统也是一样的)

应用:django + uwsgi + nginx 的 web 应用 (只要有uwsgi,配置也是一样的)

1、在uwsgi的配置文件 uwsgi.xml 中,添加 touch-logreopen配置
(我的情况是uwsgi 的配置文件在django项目根目录下,其他情况也是一样的原理):

./logs/uwsgi.log

./logs/.touchforlogrotat

如果你的uwsgi配置文件是 ini 格式的,可以新增如下内容

#进程在后台运行,并将日志打印到指定文件
daemonize = ./logs/uwsgi.log
#设置一个监听对象
touch-logreopen = ./logs/.touchforlogrotat
关于路径问题,大家根据自己的情况规划即可,因为uwsgi配置文件在项目根目录,因此上面的路径 ./logs/uwsgi.log的意思是在uwsi配置文件所在的目录中的一个文件夹logs,uwsgi.log就在logs这个文件夹内。

以上配置结合下面的脚本文件作用的原理是:当监听对象 touch-logreopen 所指向的文件被touch,时间戳改变后,当前的uwsgi.log文件会重新按照日期命名,并保存在相应的文件夹,同时uwsgi会重新新建uwsgi.log文件进行写入新日志,且不会中断当前程序的执行。如果没有touch-logreopen这个监听对象,是无法对uwsgi.log进行转储的。

2、创建脚本文件
在系统根目录的shell目录中,新建一个.sh的脚本文件uwsgi_log_cut.sh,内容如下:

#!/bin/bash
LOGDIR="/www/logs/" #当前日志所在目录
DATE=date -d "yesterday" +"%Y-%m-%d"
NEWDIR="/www/logs/history" #新建文件夹history用来放旧日志
mkdir -p ${NEWDIR}
mv ${LOGDIR}/uwsgi.log NEWDIR/uwsgi−{NEWDIR}/uwsgi-NEWDIR/uwsgi{DATE}.log #将旧日志重新以日期命名
touch /www/logs/.touchforlogrota
这里面的文件路径www在系统根目录,我django项目就在www文件夹。

3、脚本的运行设置
通过crontab设置定时任务,命令行下输入:

crontab -e
会进入一个当前用户的文件,在这个文件中添加下面这行操作:

‘’’

          • 执行任务
            第一个* 一小时当中的第几分钟:0-59
            第二个* 一天当中的第几个小时:0-23
            第三个* 一月当中的第几天:1-31
            第四个* 一年当中的第几个月:1-12
            第五个* 一周当中的第几个星期:0-7 0,7都代表周日
            ‘’’
            0 0 * * * sh /shell/uwsgi_log_cut.sh #代表每天0点执行脚本 uwsgi_log_cut.sh
            这里的原理就是每天0点执行系统根目录中shell文件夹中的uwsgi_log_cut.sh文件。

最后重启uwsgi,logs文件中的history文件夹都会有每天的日志了

#!/bin/bash
#0 0 * * * sh /home/lizhihua/ranger2020/restart.sh
echo "********************重启开始********************"
# 切换目标文件夹
cd /home/lizhihua/ranger2020/
# 拉到当前目录
#https://gitee.com/gistide_1/ranger2020.git

# 激活环境
source /home/lizhihua/ranger2020/venv/bin/activate
# 更新或者下载依赖包

# 查看进程
ps -ef|grep python3.7

#这里的-d 参数判断$myPath是否存在 ,! -d 表示不存在
if [ ! -d "/var/log/uwsgi" ]; then
  mkdir -p /var/log/uwsgi
fi

NEWDIR="/var/log/uwsgi/history"   #新建文件夹history用来放旧日志
if [ ! -d "$NEWDIR" ]; then
  mkdir -p ${NEWDIR}
fi

myPath="/var/log/uwsgi/ranger2020.log"
if [ ! -f "$myPath" ]; then
  touch "$myPath"
fi

dd=`date +%Y%m%d%H%M%S`

mv -f /var/log/uwsgi/ranger2020.log  ${NEWDIR}/ranger2020-${dd}.log   #将旧日志重新以日期命名

mystart="/home/lizhihua/ranger2020/restart.sh"
#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$mystart" ]; then
  chmod -R 777 "$mystart"
fi

sleep 3s
echo "正在关闭Python服务"
mypid="/var/run/ranger2020.pid"
if [ ! -f "$mypid" ]; then
  PID=-1
else
  PID=$(cat "$mypid")
fi
PID_EXIST=$(ps aux | awk '{print $2}'| grep -w $PID)

if [ ! $PID_EXIST ];then
  echo the process $PID is not exist
  pkill -9 -f uwsgi
  echo "启动Python服务"
  #启动:
  uwsgi --ini run.ini
else
  echo the process $PID exist
  echo "重启Python服务"
  #重启:
  uwsgi --reload "$mypid"
fi

#保存备份个数
number=30
#找出需要删除的日志
delfile=`ls -l -crt  $NEWDIR/*.log | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -l -crt  $NEWDIR/*.log | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
  #删除最早生成的备份,只保留number数量的备份
  rm $delfile
  #写删除文件日志
  #echo "delete $delfile" >> $backup_dir/*.log
fi

echo "********************重启结束********************"

我需要开发一个基于 Python 3.13.7+Django 5.2.6+MySQL 8.4 的前后端分离博客项目,要求如下: ## 1. 项目概述 - 开发一个功能完整、界面美观、交互友好的现代化博客系统 - 采用前后端完全分离的架构,Django 作为后端 API 服务,前端采用主流框架独立开发 - 注重用户体验和视觉设计,确保界面美观、有设计感 - 实现高性能、高可用、可扩展的系统架构 ## 2. 技术栈要求 - **后端**:Python 3.13.7,Django 5.2.6,Django REST Framework - **数据库**:MySQL 8.4,优化表结构和索引设计 - **认证**:JWT (JSON Web Tokens) 认证机制 - **前端**:React 18+,TypeScript,Ant Design 5. X,Redux Toolkit - **构建工具**:Poetry (Python 依赖管理),Vite (前端构建) - **API 文档**:Swagger/OpenAPI 自动生成文档 ## 3. 视觉设计与用户体验 - **UI 设计**:要求现代化、简约而不简单,具有良好的视觉层次感 - **色彩方案**:设计专业的配色方案,主色调选择稳重而不失活力的蓝色系或深灰色系 - **排版**:精心设计的排版系统,确保文章阅读体验舒适 - **动画效果**:添加适当的过渡动画和交互反馈,但不过度使用 - **响应式设计**:完全适配移动端、平板和桌面端 - **可访问性**:符合 WCAG 标准,支持键盘导航和屏幕阅读器 ## 4. 核心功能模块 ### 4.1 用户管理模块 - 用户注册、登录、注销功能 - 个人信息管理(头像、简介、密码等) - 角色权限控制(普通用户、作者、管理员) - 邮箱验证和密码重置功能 - 用户贡献热力图展示(类似 GitHub 贡献图) ### 4.2 博客文章模块 - 文章的 CRUD 操作,支持草稿保存 - 富文本编辑功能,支持图片、视频插入 - 文章分类和标签管理 - 文章评论系统,支持多级回复 - 文章阅读量统计和热门文章推荐 - 文章分享功能 - 文章收藏功能 ### 4.3 媒体管理模块 - 图片、视频等媒体文件的上传、管理 - 媒体文件分类和搜索 - 媒体文件预览功能 - 支持拖拽上传和批量上传 - 图片压缩和格式转换 ### 4.4 评论互动模块 - 多级评论系统,支持回复功能 - 评论点赞和踩功能 - 评论排序和筛选 - 评论通知功能 - 敏感词过滤和评论审核 ### 4.5 搜索模块 - 全文搜索功能,支持模糊匹配 - 高级筛选功能(按分类、标签、日期等) - 搜索结果排序和分页 - 搜索建议和历史记录 ### 4.6 统计分析模块 - 文章访问量统计和分析 - 用户活跃度统计 - 热门内容排行 - 系统使用情况监控 - 基于 grid 网格布局的贡献热力图,使用54列(周数)和7行(星期几)来展示用户活跃度,当用户将鼠标悬停在热力图的某个格子上时,提示框将显示日期周几和贡献次数,让用户能够更清楚地了解每一的具体情况。 ### 4.7 系统管理模块 - 用户管理和权限分配 - 内容审核和管理 - 系统配置和参数设置 - 数据备份和恢复 ## 5. 技术架构与性能优化 - **模块化设计**:按功能模块划分 Django 应用 - **数据库优化**:合理设计表结构、索引,优化查询性能 - **API 性能优化**:实现缓存策略,减少数据库查询 - **前端性能优化**:代码分割、懒加载、资源优化 - **安全性设计**:CSRF 防护、XSS 过滤、SQL 注入防护、敏感数据加密 - **跨域处理**:配置 CORS 策略 - **错误处理**:统一的异常处理机制 - **日志系统**:完善的日志记录和分析系统 ## 6. 开发与测试环境 - **环境配置**:区分开发、测试、生产环境配置 - **版本控制**:使用 Git 进行代码管理 - **代码规范**:遵循 PEP 8 和业内最佳实践 - **测试策略**:单元测试、集成测试、端到端测试 - **CI/CD**:配置持续集成和持续部署流程 - **开发工具**:推荐使用 VSCode、PyCharm 等 IDE ## 7. 项目交付要求 - **项目文档**:详细的技术文档、API 文档和使用说明 - **源代码**:完整的前后端源代码,组织良好的项目结构 - **示例数据**:提供测试用的示例数据 - **部署指南**:详细的部署步骤和环境配置说明 - **性能报告**:系统性能测试报告 ## 8. 扩展功能 - **社交分享**:集成主流社交平台分享功能 - **SEO 优化**:针对搜索引擎的优化 - **Markdown 编辑器**:支持 Markdown 格式文章编辑 - **定时发布**:文章定时发布功能 - **主题切换**:支持深色/浅色主题切换 - **多语言支持**:国际化和本地化支持 - **RSS 订阅**:提供内容订阅功能 - **通知系统**:站内信和邮件通知 请基于以上需求,提供完整的项目开发方案,包括但不限于: - 项目目录结构 - 数据库设计 - API 设计 - 前后端实现思路 - 部署方案 - 关键技术点和解决方案 - 开发流程建议,确保本地成功运行
最新发布
09-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值