2011-04-22 54 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('')