Ошибка выброса воздушного тормоза "pybrake - ERROR - strconv.ParseInt: разбор" None ": неверный синтаксис" - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь использовать регистратор Airbrake в проекте Django, выполнив шаги, описанные в https://github.com/airbrake/pybrake#django-integration.

Я настроил 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, pybrake сам регистрирует ошибку:

strconv.ParseInt: синтаксический анализ "None": неверный синтаксис

Вот полная последовательность команд:

(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, выдает эту ошибку,или как его отладить.Кто-нибудь может объяснить эту ошибку?

1 Ответ

0 голосов
/ 31 мая 2018

Похоже, сам сервер airbrake написан на Go.

Это можно сделать из следующих фактов:

  • На их странице "О программе" (https://airbrake.io/about) они перечисляют одного из своих членов в качестве «разработчика Lead Go» и говорят, что «используют Go с версии до 1.0». Также в описании своего технического директора они говорят, что ему нравится «взламывать свой дом с помощью Go».

  • Вы получаете strconv.ParseInt (Go) ошибку от Python

  • Есть сообщение о получении strconv.ParseInt при использовании клиента Rubyсообщить об ошибках воздушного тормоза (https://github.com/airbrake/airbrake/issues/502)

Таким образом, объяснение этой ошибки может быть в том, что клиент Python получает эту ошибку от сервера при отправке отчета и регистрирует ее.

Что касается того, как отладить это, я бы сказал, что лучшим способом было бы захватить запрос, который клиент отправляет на сервер.

Вы можете сделать это, например, изменив код здесь, чтобы он указывал на вашсобственный сервер вместо воздушного тормоза и регистрируйте запросы:

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

Или каким-либо образом перехватить HTTP-трафик.

Вы, вероятно, увидите данные формы JSON / XML / HTTP, в которых к значению None будет прикреплено значениесвойство, которое вместо этого должно быть числом, которое вызовет эту ошибку на стороне сервера.

...