博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python日志轮转RotatingFileHandler在django中的一个bug
阅读量:6050 次
发布时间:2019-06-20

本文共 1774 字,大约阅读时间需要 5 分钟。

hot3.png

简介

大量过时的日志会占用硬盘空间,甚至长时间运行不注意会占满硬盘导致宕机,那么就可以使用内建logging模块根据文件大小(logging.handlers.RotatingFileHandler)或者时间(logging.handlers.TimedRotatingFileHandler)进行日志轮转。使用细节参考python官方文档

问题

在django中使用时通常如下(只截取了RotatingFileHandler部分配置示例):

LOGGING = {    'version': 1,    'disable_existing_loggers': True,    'handlers': {        'default': {            'level':'DEBUG',            'class':'logging.handlers.RotatingFileHandler',            'filename': os.path.join(LOGDIR, LOGFILE),  # 或者直接写路径:'c:\logs\all.log',            'maxBytes': 1024*1024*5,  # 5 MB            'backupCount': 5,        }    }}

以上配置时当文件大于5Mb时将当前日志重命名备份,新建一个空日志记录新日志。当备份日志达到5个时删除旧的备份文件。

当在python开发模式(manage.py runserver)时如果备份文件已经达到backupCount后会报错:

  • linux下:
Traceback (most recent call last):  File "/usr/lib64/python2.7/logging/handlers.py", line 77, in emit    self.doRollover()  File "/usr/lib64/python2.7/logging/handlers.py", line 136, in doRollover    os.rename(sfn, dfn)OSError: [Errno 13] Permission deniedLogged from file utils.py, line 89
  • windows下
Traceback (most recent call last):  File "F:\Python27\lib\logging\handlers.py", line 77, in emit    self.doRollover()  File "F:\Python27\lib\logging\handlers.py", line 142, in doRollover    os.rename(self.baseFilename, dfn)WindowsError: [Error 32] Logged from file utils.py, line 89

原因

这是由于django开发模式时会同时启动两个进程加载settings.py,导致日志文件占用后无法重命名或者删除

都知道django开发模式下如果有文件变动会自动重新启动,所以同时又两个进程,一个是程序正常运行的进程,另一个是用来监听变更并重启服务的进程,他们都会加载一遍settings.py,可以在settings.py中加print然后启动会看到控制台又两次输出。

我怀疑使用uwsgi等wsgi程序时的多进程也会导致此问题,但是我使用uwsgi开启四个进程启动项目时未出现此错误,但并不代表没有此问题,因为我没有进行并发测试。

解决办法

开发环境

  1. 本地开发的话可以停止服务,然后删除旧的日志再启动
  2. python manage.py runserver增加 --reload参数不启用自动重启,也就不会又两个进程,但是本地开发不能自动重启稍有不便

生产环境

  1. 推荐使用sentry、elk或者一些集中日志服务使用socket或者http方式记录日志

参考

转载于:https://my.oschina.net/watcher/blog/1824673

你可能感兴趣的文章
Android热修复升级探索——代码修复冷启动方案
查看>>
学校宿舍的深夜之思考
查看>>
字符串的扩展
查看>>
神奇语言 python 初识函数
查看>>
Windows安装Composer出现【Composer Security Warning】警告
查看>>
企业架构研究总结(22)——TOGAF架构开发方法(ADM)之信息系统架构阶段
查看>>
linux
查看>>
[Hadoop]MapReduce多输出
查看>>
算法(Algorithms)第4版 练习 1.3.4
查看>>
jquery easyUI checkbox复选项获取并传后台
查看>>
浅析NopCommerce的多语言方案
查看>>
设计模式之简单工厂模式
查看>>
C++中变量的持续性、链接性和作用域详解
查看>>
2017 4月5日上午
查看>>
第一阶段冲刺报告(一)
查看>>
使用crontab调度任务
查看>>
【转载】SQL经验小记
查看>>
zookeeper集群搭建 docker+zk集群搭建
查看>>
Vue2.5笔记:Vue的实例与生命周期
查看>>
论JVM爆炸的几种姿势及自救方法
查看>>