91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django多進程滾動日志問題解決方案

發布時間:2020-08-19 18:31:42 來源:腳本之家 閱讀:159 作者:luozx207 欄目:開發技術

這篇文章主要介紹了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
    },
    ...
  }
  ...
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

普兰县| 随州市| 缙云县| 郧西县| 丰城市| 五原县| 定兴县| 浏阳市| 九龙城区| 信丰县| 砚山县| 饶河县| 高雄市| 和顺县| 井冈山市| 博乐市| 伊金霍洛旗| 冕宁县| 广安市| 东港市| 绥棱县| 罗源县| 湖口县| 建阳市| 洪泽县| 灌南县| 灵武市| 咸阳市| 沁阳市| 固镇县| 城固县| 罗田县| 黎川县| 布拖县| 海安县| 镇安县| 澄城县| 庐江县| 资阳市| 昌黎县| 成都市|