减速板投掷错误 "pybrake - ERROR - strconv.ParseInt: parsing "None“:语法无效”

Airbrake throwing error "pybrake - ERROR - strconv.ParseInt: parsing "None": invalid syntax"

我正尝试按照 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 层次结构中名为 lucy_web/lib/session_recommendation.py 的特定文件中,我有以下测试函数:

import logging

logger = logging.getLogger(__name__)

def log_something():
    logger.error("Logging something...")

但是,如果我尝试从 Django shell 调用此函数,pybrake 本身会记录错误:

strconv.ParseInt: parsing "None": invalid syntax

这是完整的命令序列:

(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

https://golang.org/pkg/strconv/#ParseInt看来strconv.ParseInt实际上是Go语言的内置函数,所以我不明白为什么pybrake,这是一个Python 包,正在抛出这个错误,或者如何调试它。谁能解释这个错误?

看来 airbrake 服务器本身是用 Go 写的。

这可以从以下事实推断出来:

  • 在他们的 "About" 页面 (https://airbrake.io/about) 中,他们将他们的一名成员列为他们的 "Lead Go developer",并说他们已经 "using Go since before 1.0"。同样在他们的 CTO 描述中,他们说他喜欢 "hacking his home with Go".

  • 您收到来自 Python

  • strconv.ParseInt (Go) 错误
  • 有一份报告称,使用 Ruby 客户端报告减速板错误 (https://github.com/airbrake/airbrake/issues/502)

    [= 也得到了 strconv.ParseInt 41=]

所以对错误的解释是 Python 客户端在发送报告并记录此错误时从服务器收到此错误。

至于如何调试,我认为最好的方法是捕获客户端发送到服务器的请求。

例如,您可以通过修改此处的代码以指向您自己的服务器而不是 airbrake 的服务器并记录请求来执行此操作:

https://github.com/airbrake/pybrake/blob/master/pybrake/notifier.py#L41

或者以某种方式捕获 HTTP 流量。

您可能会看到一个 JSON/XML/HTTP 表单数据,其中将有一个 "None" 值附加到 属性 上,该值应该是一个数字,然后会引发此问题服务器端错误。