2013-05-26 25 views
1

我試圖讓Django的芹菜登錄(安慰)DEBUG(或更高版本)從我的模塊(而不是那些庫)即將發生的事件。於是開始celeryd有:芹菜Python記錄配置只能從指定的模塊記錄調試

python hack/manage.py celeryd -E -l DEBUG -c 2 

將意味着所有的調試事件傳遞到控制檯(這是我的根記錄的處理程序)。我想修改此行爲,以便:從MyModule的

  • DEBUG事件(和孩子)去從所有其它模塊安慰
  • DEBUG事件被忽略(如:去空處理器)
  • 正常處理所有其他事件(例如:錯誤繼續去郵件處理程序)

這樣做的最佳方法是什麼?

回答

3

我已經stubbled與此並沒有單一的「最佳」的方式來做到這一點。記住一些事情很重要。

  • 芹菜作爲單獨的可執行文件在生產環境中運行。這似乎是顯而易見的,但是這意味着,與其他的東西(如Django的)分享日誌文件將無法很好地工作(見CELERYD_HIJACK_ROOT_LOGGER),所以不要做..在生產和開發以相似的方式運行
  • 保持事物環境是真正的關鍵,所以當你移動到procution(見CELERY_ALWAYS_EAGER並使用它)
  • 芹菜從manage.py運行將引用您的settings.py文件的配置,如果你使用的設置

當事情不走歪考慮到這一點,我建議您設置日誌以滿足您的需求。首先確保您的模塊的日誌記錄級別已正確設置。關於如何設置日誌記錄,請參閱我的other post。這裏是一個精簡版,以滿足您的需求

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': True, 
    'formatters': { 
     'standard': { 
      'format': "[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s", 
      'datefmt': "%d/%b/%Y %H:%M:%S" 
     }, 
    }, 
    'handlers': { 
     'console': { 
      'level': 'DEBUG', 
      '()': 'logutils.colorize.ColorizingStreamHandler', 
      'formatter': 'standard', 
      'stream': sys.stdout 
     }, 
     'mail_admins': { 
      'level': 'ERROR', 
      'class': 'django.utils.log.AdminEmailHandler', 
      'include_html': True, 
     }, 

    }, 
    'loggers': { 
     'django': { 
      'handlers': ['mail_admins'], 
      'propagate': True, 
      'level': 'ERROR', 
     }, 
     'mymodule': { 
      'handlers': ['console', 'mail_admins'], 
      'propagate': True, 
      'level': 'DEBUG' 

     }, 
    } 
} 

然後像這樣運行它。

./manage.py celeryd --event --beat --settings=dev 

這樣做是設置兩個不同的處理程序。第一個是控制檯處理程序,它報告任何DEBUG和以上的東西。第二個是郵件處理程序,它只查看ERRORS及更高版本。接下來是從記錄儀報告的內容。所有django。*記錄器都會被報告給任何ERROR級別處理程序(mail_admins)。我們的任何模塊都可以將DEBUG和以上版本推送到這兩個版本。

我想這就是你以後的樣子。

+0

嗨 - 這不完全是我需要的。我試圖設置的是一個配置,其中來自白名單上的記錄器的所有DEBUG調用都轉到控制檯,並且來自其他模塊(例如:庫)的所有DEBUG調用都會被忽略。因此,例如:來自名爲「mymodule」(以及所有子模塊)的記錄器的所有DEBUG調用都將被捕獲,並且任何其他DEBUG調用都將被忽略。級別高於DEBUG將不受影響。 – Taras

+0

哦,在這種情況下,只需將名爲「'的記錄器更改爲」mymodule「。我已經更新了我的答案 – rh0dium