Django多进程滚动日志问题解决方案


Posted in Python onDecember 17, 2019

这篇文章主要介绍了Django多进程滚动日志问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

使用RotatingFileHandler控制日志文件的大小

# settings.py
LOGGING = {
  ...
  'handlers': {
    ...
    'file': {
      'level': 'INFO',
      'class': 'logging.RotatingFileHandler',
      'filename': os.path.join(LOGS_DIR, 'app.log'),
      'formatter': 'verbose',
      'maxBytes': 1024,
      'backupCount': 5
    },
    ...
  }
  ...
}

设置RotatingFileHandler的maxBytes与backupCount,这两个参数默认是0。

当两个参数都不为0时,会执行rallover过程:log文件大小接近maxBytes时,新建一个文件作为log的输出,旧的文件会被加上类似'.1'、'.2'的后缀。

举个例子,如果backupCount=5,log file定义的名字为app.log,你会得到app.log, app.log.1, app.log.2 一直到 app.log.5。

然而被写入日志的永远是app.log,写满了之后重命名为app.log.1,如果app.log.1存在,app.log.1会先被重名名为app.log.2,依此类推。

另外,如果app.log.5存在,它会被删除。

windows环境遇到的问题

PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。

首先,Django默认启用两个进程,一个进程用来检测文件变化,另一个进程是正经的服务器进程。settting.py这个文件被加载了两次,也就是日志文件打开了两次,如果是服务器进程先启动,则看不出毛病来;如果是监控进程首先打开了从settings.py加载了日志,那么正经服务器进程就无法再次加载日志了。

如果你的Django项目是单进程的,那么在启动Django项目的时候使用--noreload就可以解决

python manage.py runserver 0.0.0.0:80 --noreload

noreload表示不启动Django的监控进程,也就是说项目代码的改变不再会影响已经载入内存中的代码,这样,Django就只会起一个进程。

但是,如果你的项目是多进程的,或者在某些单独的模块,比如celery中为了使用Django的ORM而使用了django.setup()

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
import django
django.setup()

那么就需要用另一个日志模块解决

pip install concurrent-log-handler

在LOGGING中,用concurrent_log_handler.ConcurrentRotatingFileHandler代替logging.RotatingFileHandler

# settings.py
LOGGING = {
  ...
  'handlers': {
    ...
    'file': {
      'level': 'INFO',
      'class': 'concurrent_log_handler.ConcurrentRotatingFileHandler',
      'filename': os.path.join(LOGS_DIR, 'app.log'),
      'formatter': 'verbose',
      'maxBytes': 1024,
      'backupCount': 5
    },
    ...
  }
  ...
}

测试一下,问题解决

另外,如果是linux系统下的多进程Django,可以用ConcurrentLogHandler模块

pip install ConcurrentLogHandler
# settings.py
LOGGING = {
  ...
  'handlers': {
    ...
    'file': {
      'level': 'INFO',
      'class': 'cloghandler.ConcurrentRotatingFileHandler',
      'filename': os.path.join(LOGS_DIR, 'app.log'),
      'formatter': 'verbose',
      'maxBytes': 1024,
      'backupCount': 5
    },
    ...
  }
  ...
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用PYTHON创建XML文档
Mar 01 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
利用python提取wav文件的mfcc方法
Jan 09 Python
Pycharm 设置默认头的图文教程
Jan 17 Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 Python
详解Python用三种方式统计词频的方法
Jul 29 Python
Python迭代器模块itertools使用原理解析
Dec 11 Python
Win10里python3创建虚拟环境的步骤
Jan 31 Python
Python日志logging模块功能与用法详解
Apr 09 Python
Python tkinter实现日期选择器
Feb 22 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 24 Python
python django中8000端口被占用的解决
Dec 17 #Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 #Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 #Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 #Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 #Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 #Python
Django app配置多个数据库代码实例
Dec 17 #Python
You might like
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
常用DOM整理
2015/06/16 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
Python contextlib模块使用示例
2015/02/18 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
django 2.0更新的10条注意事项总结
2018/01/05 Python
详解Django CAS 解决方案
2019/10/30 Python
pycharm显示远程图片的实现
2019/11/04 Python
python实现从ftp服务器下载文件
2020/03/03 Python
对python中各个response的使用说明
2020/03/28 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
职业生涯规划书的格式
2013/12/29 职场文书
单位提档介绍信
2014/01/17 职场文书
社区母亲节活动方案
2014/03/05 职场文书
借款协议书范本
2014/04/22 职场文书
文明演讲稿范文
2014/05/12 职场文书
小学语文教学经验交流材料
2014/06/02 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
六年级语文教学反思
2016/03/03 职场文书
分享一些Java的常用工具
2021/06/11 Java/Android
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
基于PyQt5制作一个群发邮件工具
2022/04/08 Python