时间:2021-05-22
这篇文章主要介绍了Django多进程滚动日志问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
使用RotatingFileHandler控制日志文件的大小
设置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环境遇到的问题
首先,Django默认启用两个进程,一个进程用来检测文件变化,另一个进程是正经的服务器进程。settting.py这个文件被加载了两次,也就是日志文件打开了两次,如果是服务器进程先启动,则看不出毛病来;如果是监控进程首先打开了从settings.py加载了日志,那么正经服务器进程就无法再次加载日志了。
如果你的Django项目是单进程的,那么在启动Django项目的时候使用--noreload就可以解决
python manage.py runserver 0.0.0.0:80 --noreloadnoreload表示不启动Django的监控进程,也就是说项目代码的改变不再会影响已经载入内存中的代码,这样,Django就只会起一个进程。
但是,如果你的项目是多进程的,或者在某些单独的模块,比如celery中为了使用Django的ORM而使用了django.setup()
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")import djangodjango.setup()那么就需要用另一个日志模块解决
pip install concurrent-log-handler在LOGGING中,用concurrent_log_handler.ConcurrentRotatingFileHandler代替logging.RotatingFileHandler
# settings.pyLOGGING = { ... '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.pyLOGGING = { ... 'handlers': { ... 'file': { 'level': 'INFO', 'class': 'cloghandler.ConcurrentRotatingFileHandler', 'filename': os.path.join(LOGS_DIR, 'app.log'), 'formatter': 'verbose', 'maxBytes': 1024, 'backupCount': 5 }, ... } ...}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
先看解决方案#------------mysqlroot用户无法赋权问题解决--------1,登录mysql-uroot-p2,usemysql;选择mysq
问题:使用keep-alive标签后部分安卓机返回缓存页位置不精确问题解决方案:constrouter=newRouter({scrollBehavior(to
解决方案1:禁用缓存,前一次使用的方法,在电脑上各浏览器都没问题,但在ipad、安卓手机上仍有问题解决方案2:禁用浏览器后退键javascript:window
本文实例讲述了JS中getElementsByClassName与classList兼容性问题解决方案。分享给大家供大家参考,具体如下:document(ele
发现还没有aspupload这个组件的,这两样功能的解决方案,现把我的改进方案写在这里!谢谢关于aspupload上传组件,文件重命名,进度条的问题解决方案!共