4

我正在尝试按照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:解析“无”:无效语法

以下是完整的命令序列:

(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 语言的内置函数,所以我不明白为什么pybrakePython 包会抛出这个错误,或如何调试它。谁能解释这个错误?

4

1 回答 1

2

似乎 airbrake 服务器本身是用 Go 编写的。

这可以从以下事实推断:

  • 在他们的“关于”页面(https://airbrake.io/about)中,他们将其中一名成员列为“Lead Go 开发人员”,并表示他们“从 1.0 之前就一直在使用 Go”。同样在他们的 CTO 描述中,他们说他喜欢“用 Go 入侵他的家”。

  • strconv.ParseInt从 Python 收到 (Go) 错误

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

因此,对错误的解释是 Python 客户端在发送报告并记录此错误时从服务器获取此错误。

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

例如,您可以通过修改此处的代码以指向您自己的服务器而不是 airbrake 的服务器并记录请求来做到这一点:

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

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

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

于 2018-05-31T02:22:28.277 回答