在Sentry Django guide之后,我已经设置并部署了项目。
因此,我使用RAVEN_CONFIG
值和SENTRY_DSN
值配置release
,并在raven.contrib.django.raven_compat
中包含INSTALLED_APPS
。
我已经确认,使用此配置,以下命令将正确地在哨兵中生成一条消息。
python manage.py raven test
但是,我创建了以下django视图以引发异常,作为确认哨兵正在工作的另一种方法,当我单击此视图时,得到了500的响应,但哨兵中没有任何显示。
app1 / views.py
def error(request):
x = 1/0 # error for sentry testing
我期望的是任何异常(包括500个错误), 在django中发生的事件将被发送到哨兵,而无需使用 记录。
我对乌鸦哨兵配置的理解是否错误? 还是我需要配置其他东西?
我正在使用django的LOGGING设置,但此刻我不在乎是否将这些消息“错误”发送给哨兵。我目前的主要目标是捕获并发送哨兵中发生的任何异常。
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': '{asctime} [{levelname:5}] ({name}) {funcName}: {message}',
'style': '{',
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'standard',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': DJANGO_CORE_LOG_LEVEL, # Change to DEBUG to see db queries
},
'app1': {
'handlers': ['console'],
'level': DJANGO_LOG_LEVEL,
'propagate': True,
},
'app2': {
'handlers': ['console'],
'level': DJANGO_LOG_LEVEL,
'propagate': True,
}
},
}
更新
在本地使用 runserver 时,我设法获取了app1.views.error
视图以向哨兵报告错误,但是在更新配置并进行部署后,部署后仍然无法使用。 (manage raven test
确实如此
答案 0 :(得分:2)
来自岗哨文档
apt-get install
}
链接到文档:https://docs.sentry.io/clients/python/integrations/django/
编辑:从评论中
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'root': {
'level': 'WARNING',
'handlers': ['sentry'],
},
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s '
'%(process)d %(thread)d %(message)s'
},
},
'handlers': {
'sentry': {
'level': 'ERROR', # To capture more than ERROR, change to WARNING, INFO, etc.
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
'tags': {'custom-tag': 'x'},
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
}
},
'loggers': {
'django.db.backends': {
'level': 'ERROR',
'handlers': ['console'],
'propagate': False,
},
'raven': {
'level': 'DEBUG',
'handlers': ['console'],
'propagate': False,
},
'sentry.errors': {
'level': 'DEBUG',
'handlers': ['console'],
'propagate': False,
},
},
如果您不想手动执行此操作,并且希望在项目中任何地方触发异常块时都进行哨兵日志记录,请使用上面的基于日志记录的解决方案。
答案 1 :(得分:0)
正如@Mehran在LOGGING
中配置settings.py
之后说的那样,您将可以使用日志记录。假设您在example
中的loggers
的配置如下;
'loggers': {
'example': {
'handlers': ['console', 'sentry'],
'level': 'DEBUG',
'propagate': False
}
}
然后;
import logging
logger = logging.getLogger("example")
def test():
try:
# some staff
except Exception as error:
logger.error("Custom Error Message %s" %error)
logger
也有warn
,info
等。
答案 2 :(得分:0)
也可以不使用任何Sentry库而是直接使用纯requests
直接发布到Sentry DSN。如果您运行的Python或Django版本与Sentry的最新DSN不兼容,这将很有用。
我为此发布了代码-包括示例测试-here