我按照https://github.com/airbrake/pybrake#django-integration中描述的步骤尝试在Django项目中使用Airbrake记录器。
我已经配置了我的LOGGING
设置:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'airbrake': {
'level': 'ERROR',
'class': 'pybrake.LoggingHandler',
}
},
'loggers': {
'lucy_web': {
'handlers': ['airbrake'],
'level': 'ERROR',
'propagate': True,
}
}
}
然后,在名为lucy_web
的{{1}}层次结构中的特定文件中,我有以下测试函数:
lucy_web/lib/session_recommendation.py
但是,如果我尝试从Django shell调用此函数,import logging
logger = logging.getLogger(__name__)
def log_something():
logger.error("Logging something...")
本身会记录错误:
strconv.ParseInt:解析"无":语法无效
以下是完整的命令序列:
pybrake
从https://golang.org/pkg/strconv/#ParseInt看来(venv) Kurts-MacBook-Pro-2:lucy-web kurtpeek$ python manage.py shell
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.3.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from lucy_web.lib.session_recommendation import *
In [2]: log_something()
In [3]: 2018-05-30 17:25:32,201 - pybrake - ERROR - strconv.ParseInt: parsing "None": invalid syntax
实际上是Go语言的内置函数,所以我不明白为什么strconv.ParseInt
,这是一个Python包,抛出此错误,或如何调试它。任何人都可以解释这个错误吗?
答案 0 :(得分:2)
似乎airbrake服务器本身是用Go编写的。
这可以从以下事实推断出来:
在他们的"关于"页面(https://airbrake.io/about)他们将其中一名成员列为他们的" Lead Go开发者"并说他们在1.0"之前一直使用Go。同样在他们的CTO描述中,他们说他喜欢用Go"黑客攻击他的家。
您从Python
strconv.ParseInt
(Go)错误
有报道称使用Ruby客户端报告空气制动器错误(https://github.com/airbrake/airbrake/issues/502)
因此,错误的解释是Python客户端在发送报告时从服务器收到此错误并记录此错误。
至于如何调试它,我说最好的方法是捕获客户端发送到服务器的请求。
您可以这样做,例如通过修改此处的代码以指向您自己的服务器而不是空气制动器并记录请求:
https://github.com/airbrake/pybrake/blob/master/pybrake/notifier.py#L41
或以某种方式捕获HTTP流量。
您可能会看到一个JSON / XML / HTTP表单数据,其中会有一个"无"附加到应该是一个数字的属性的值,这将在服务器端引发此错误。