Django多進(jìn)程滾動(dòng)日志問(wèn)題解決方案
這篇文章主要介紹了Django多進(jìn)程滾動(dòng)日志問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
使用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 }, ... } ... }
設(shè)置RotatingFileHandler的maxBytes與backupCount,這兩個(gè)參數(shù)默認(rèn)是0。
當(dāng)兩個(gè)參數(shù)都不為0時(shí),會(huì)執(zhí)行rallover過(guò)程:log文件大小接近maxBytes時(shí),新建一個(gè)文件作為log的輸出,舊的文件會(huì)被加上類似'.1'、'.2'的后綴。
舉個(gè)例子,如果backupCount=5,log file定義的名字為app.log,你會(huì)得到app.log, app.log.1, app.log.2 一直到 app.log.5。
然而被寫入日志的永遠(yuǎn)是app.log,寫滿了之后重命名為app.log.1,如果app.log.1存在,app.log.1會(huì)先被重名名為app.log.2,依此類推。
另外,如果app.log.5存在,它會(huì)被刪除。
windows環(huán)境遇到的問(wèn)題
PermissionError: [WinError 32] 另一個(gè)程序正在使用此文件,進(jìn)程無(wú)法訪問(wèn)。
首先,Django默認(rèn)啟用兩個(gè)進(jìn)程,一個(gè)進(jìn)程用來(lái)檢測(cè)文件變化,另一個(gè)進(jìn)程是正經(jīng)的服務(wù)器進(jìn)程。settting.py這個(gè)文件被加載了兩次,也就是日志文件打開了兩次,如果是服務(wù)器進(jìn)程先啟動(dòng),則看不出毛病來(lái);如果是監(jiān)控進(jìn)程首先打開了從settings.py加載了日志,那么正經(jīng)服務(wù)器進(jìn)程就無(wú)法再次加載日志了。
如果你的Django項(xiàng)目是單進(jìn)程的,那么在啟動(dòng)Django項(xiàng)目的時(shí)候使用--noreload就可以解決
python manage.py runserver 0.0.0.0:80 --noreload
noreload表示不啟動(dòng)Django的監(jiān)控進(jìn)程,也就是說(shuō)項(xiàng)目代碼的改變不再會(huì)影響已經(jīng)載入內(nèi)存中的代碼,這樣,Django就只會(huì)起一個(gè)進(jìn)程。
但是,如果你的項(xiàng)目是多進(jìn)程的,或者在某些單獨(dú)的模塊,比如celery中為了使用Django的ORM而使用了django.setup()
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") import django django.setup()
那么就需要用另一個(gè)日志模塊解決
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 }, ... } ... }
測(cè)試一下,問(wèn)題解決
另外,如果是linux系統(tǒng)下的多進(jìn)程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 }, ... } ... }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python Django框架實(shí)現(xiàn)應(yīng)用添加logging日志操作示例
- Django 使用logging打印日志的實(shí)例
- Django日志模塊logging的配置詳解
- Django日志及中間件模塊應(yīng)用案例
- django實(shí)現(xiàn)日志按日期分割
- django日志默認(rèn)打印request請(qǐng)求信息的方法示例
- Django在Model保存前記錄日志實(shí)例
- 如何在django中添加日志功能
- 基于Django實(shí)現(xiàn)日志記錄報(bào)錯(cuò)信息
- Django使用uwsgi部署時(shí)的配置以及django日志文件的處理方法
- Django項(xiàng)目如何正確配置日志(logging)
相關(guān)文章
深入理解Python虛擬機(jī)之進(jìn)程、線程和協(xié)程區(qū)別詳解
在本篇文章當(dāng)中深入分析在 Python 當(dāng)中 進(jìn)程、線程和協(xié)程的區(qū)別,這三個(gè)概念會(huì)讓人非常迷惑,如果沒(méi)有深入了解這三者的實(shí)現(xiàn)原理,只是看一些文字說(shuō)明,也很難理解,在本篇文章當(dāng)中我們將通過(guò)分析部分源代碼來(lái)詳細(xì)分析一下這三者根本的區(qū)別是什么,需要的朋友可以參考下2023-10-10Python 相對(duì)路徑報(bào)錯(cuò):"No such file or 
如果你取相對(duì)路徑不是在主文件里,可能就會(huì)有相對(duì)路徑問(wèn)題:"No such file or directory",由于python 的相對(duì)路徑,相對(duì)的都是主文件所以會(huì)出現(xiàn)Python 相對(duì)路徑報(bào)錯(cuò),今天小編給大家?guī)?lái)了完美解決方案,感興趣的朋友一起看看吧2023-02-02python實(shí)現(xiàn)微信打飛機(jī)游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)微信打飛機(jī)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03基于Django的樂(lè)觀鎖與悲觀鎖解決訂單并發(fā)問(wèn)題詳解
這篇文章主要介紹了基于Django的樂(lè)觀鎖與悲觀鎖解決訂單并發(fā)問(wèn)題詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Python matplotlib實(shí)時(shí)畫圖案例
這篇文章主要介紹了Python matplotlib實(shí)時(shí)畫圖案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Python使用scrapy爬取陽(yáng)光熱線問(wèn)政平臺(tái)過(guò)程解析
這篇文章主要介紹了Python使用scrapy爬取陽(yáng)光熱線問(wèn)政平臺(tái)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08