2011-04-22 50 views
6

我剛安裝了django-sentry,它捕獲異常就好了。然而,由於某種原因,logger.warning和logger.error的調用沒有保存到Sentry中。django-sentry不記錄警告,錯誤等

哨兵執行:

import logging 
from sentry.client.handlers import SentryHandler 

logger = logging.getLogger() 
# ensure we havent already registered the handler 
if SentryHandler not in map(lambda x: x.__class__, logger.handlers): 
    logger.addHandler(SentryHandler()) 
# Add StreamHandler to sentry's default so you can catch missed exceptions 
logger = logging.getLogger('sentry.errors') 
logger.propagate = False 
logger.addHandler(logging.StreamHandler()) 

記錄來電:

logger.warning("Category is not an integer", exc_info=sys.exc_info(), extra={'url': request.build_absolute_uri()}) 

任何想法? 謝謝!

+0

這方面的更新?我有一個類似的問題,除了Sentry日誌記錄在我的開發服務器上正常工作,但不是我的生產服務器。我的產品具有與上面列出的完全相同的症狀。 – 2011-06-08 03:24:44

+0

您在哪裏獲得記錄器以保存警告並添加Sentry處理程序時執行?例如,如果您在manage.py中使用它,則無法在生產中執行它。 – Alerion 2011-06-13 15:49:43

+0

我在記錄警告之前添加了Sentry記錄器,所以我確信它正在執行。不過,我不知道爲什麼它可以在我的開發服務器上運行,而不是我的生產服務器。 – 2011-06-14 02:05:54

回答

3

嘗試添加:

logger.setLevel(logging.DEBUG)

的logging.getlogger後,我的作品上開發ENV。

+0

感謝您的回覆。不幸的是,這並不適合我。 404s和500s以及其他例外情況都記錄得很好,但有其他想法?謝謝! – rabbid 2011-04-22 10:26:27

+0

稍微更新一下。這不但不行,那行代碼實際上殺死了我的Django dev服務器。當我評論它時,事情再次正常工作。瘋。 – rabbid 2011-04-22 11:48:14

0

您可以將FileHandler添加到'sentry.errors'記錄器,並檢查它是否包含生產中的某些錯誤。但是真正的stdout應該寫入服務器日誌。可以檢查這個。

3

您將哨兵流處理程序附加到logging.getLogger('sentry.errors')。這意味着記錄到sentry.errors或以下將使用該哨兵流處理程序。

但是,日誌到'my_app.something'不會在那裏結束!所以你幾乎錯過了所有的日誌消息。

解決方案:將流處理程序附加到根記錄器:logging.getLogger('')