Django多程序滾動日誌的問題

2022-05-12 20:44:20 字數 1434 閱讀 8177

使用rotatingfilehandler控制日誌檔案的大小

# settings.py

logging = ,

...}

...}

設定rotatingfilehandler的maxbytes與backupcount,這兩個引數預設是0。

當兩個引數都不為0時,會執行rallover過程:log檔案大小接近maxbytes時,新建乙個檔案作為log的輸出,舊的檔案會被加上類似'.1'、'.2'的字尾。

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 = ,

...}

...}

測試一下,問題解決

另外,如果是linux系統下的多程序django,可以用concurrentloghandler模組

pip install concurrentloghandler
# settings.py

logging = ,

...}

...}

Django 多程序下日誌切割導致錯亂問題解決方案

在單程序下日誌的處理邏輯 設定1小時的切割間割 第1步 生成info.log 第2步 寫入1小時日誌 第3步 1小時之後,判定info.log 2018 11 30 1檔案是否存在,如果存在則刪除,然麼重新命名info.log為info.log 2018 11 30 1 第4步 重新生成info.l...

python多程序列印輸出 多程序列印日誌

多程序的日誌和多執行緒的日誌有一點區別。原因是 python 的 logging 包不支援程序共享鎖,所以來自不同的程序的日誌可能會混在一起。我們嘗試一下在上邊的例子裡加乙個基礎日誌。下邊是 import loggingimport multiprocessingfrom multiprocessi...

iis web園多程序 與session的問題

iis 應用池設定了 web 園 多執行緒 開始發現有些頁面資訊不對。本以為是快取的問題,清除快取仍然沒有效果。進一步發現出現問題都是在使用session的頁面。net為我們提供了三種會話狀態儲存機制。一種程序內模式 問題模式 會話狀態儲存在程序內。兩種程序外模式 狀態機模式,會話狀態村處於網路狀態...