2017-04-08 48 views
4

我一直想弄清楚Python記錄器和芹菜記錄器之間的區別,特別是下面的命令之間的區別,但無法找到一個好的答案。celery.utils.log中的獲取記錄器函數與日誌記錄有什麼不同?

我正在使用芹菜v3,與Django 1.10。

from celery.utils.log import get_task_logger 
logger = get_logger(__name__) 
... 
from celery.utils.log import get_task_logger 
logger = get_task_logger(__name__) 
... 
import logging 
logger = logging.get_logger(__name__) 

芹菜文檔(latestv3.1)非常缺乏關於這個話題。 我看了類似的問題,如this one,但它仍然不清楚使用哪個,爲什麼要使用那個,特別是差異是什麼。我正在尋找一個清晰,簡潔的答案。

我也在我的生產環境中使用哨兵。這個選擇如何影響你的哨兵日誌?即these常見設置

回答

3

從使用經驗get_task_logger似乎讓你幾件重要的事情,特別是與哨兵。

  • 自動預謀的任務名稱,以您的日誌輸出
  • 設定在較高的水平記錄處理規則不僅僅是模塊的能力(我相信這是實際上設置記錄器名稱celery.task
  • 也許,最重要的是爲Sentry設置,它是否將日誌記錄掛鉤到Sentry使用的日誌處理程序中。

重要:有一個bit of extra config需要進入芹菜登記哨兵:

https://docs.sentry.io/clients/python/integrations/celery/

您可能能夠得到錯誤流入哨兵沒有一些這樣設置的,但我認爲這會爲您提供最佳的跟蹤和細節信息,並確保通過throws聲明的預期異常等情況被正確忽略。

+0

這是有幫助的。在接受之前我會測試一下。你知道在任務中調用的函數(即util函數,管理函數等)中的記錄器是否也具有此屬性?我的印象是,除非他們也用get_task_logger調用。 – jmerkow

+1

只是爲了清楚我需要把'celery.task'這樣的東西:{ 'level':'INFO', 'handlers':['console','sentry'], 'propagate':False, },當我使用get_task_logger時,在我的配置中? – jmerkow

+0

@jmerkow「你知道在任務中調用的函數(即util函數,管理函數等)中的記錄器是否也有這個屬性?」 好問題。根據我在Sentry中看到的內容,它看起來像是從堆棧報告的下一個報告到他們正在使用的記錄器的功能,雖然他們確實使Sentry在上下文中有些缺乏,而如果在正常執行中捕獲相同的條目。我也可以說,我們沒有任何特殊處理'celery.task'在我們的記錄器。這個設置得到的東西流動:https://docs.sentry.io/clients/python/integrations/celery/ –