这篇文章主要介绍了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 }, ... } ... }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
更新日志
- 张芸京.2016-失败的高歌【泡耳音乐】【WAV+CUE】
- 群星.1991-音乐工厂1·皇后大道东【音乐工厂】【WAV+CUE】
- 群星.1992-音乐工厂2·首都【音乐工厂】【WAV+CUE】
- 群星.1994-音乐工厂3·儿童乐园【音乐工厂】【WAV+CUE】
- 胡鸿钧.2021-ex:CHANGE【星梦娱乐】【WAV+CUE】
- 班得瑞原装进口《第一张新世纪专辑:仙境》1CD[APE/CUE分轨][292.3MB]
- 伍佰《摇滚教父 伍佰黄金精选 2CD》[WAV+CUE][990MB]
- 班得瑞原装进口《第二张新世纪专辑:寂静山林》1CD[APE/CUE分轨][327.1MB]
- Beyond.1989-真的见证(2024环球MQA-UHQCD限量版)【环球】【WAV+CUE】
- 陈怡婷.2024-予你的心谁来赔【福茂】【FLAC分轨】
- 陈冠希.2003-HITS.OR.MISSES【英皇娱乐】【WAV+CUE】
- 班得瑞原装进口《第三张新世纪专辑:春野》1CD[APE/CUE分轨][278.9MB]
- 班得瑞原装进口《第四张新世纪专辑:蓝色天际》1CD[APE/CUE分轨][284.8MB]
- 班得瑞原装进口《第五张新世纪专辑:迷雾森林+EP》1CD[APE/CUE分轨][334.2MB]
- 田震.1997-顺其自然(日版)【红星生产社】【WAV+CUE】