Ведение журнала WAMP worker Trace Back Error

Я пытался отлаживать вызовы удаленных процедур для компонентов python на основе WAMP (протокол обмена сообщениями веб-приложений). Например:

Интерфейс (браузер)

session.call('math.add2', [2, 'two']);

Бэкенд (питон)

@wamp.register("math.add2")
def add2(self, x, y):
    return x + y

Это дает некоторое представление об ошибке. Ошибка

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

В качестве решения я немного изменил wamp.py (добавил строку traceback.print_exc()), как показано ниже, чтобы вывести ошибки в журнал консоли:

# autobahn/asyncio/wamp.py
...
import traceback
...

class FutureMixin:
  ...
  @staticmethod
  def _as_future(fun, *args, **kwargs):
     try:
        res = fun(*args, **kwargs)
     except Exception as e:
        traceback.print_exc() # Added this line
        ...

Это стандартный способ справиться с этим?


person Eddie    schedule 17.01.2015    source источник


Ответы (1)


AutobahnPython позволяет включить отправку трассировок в сообщениях об ошибках WAMP:

class MyComponent(ApplicationSession):
   def __init__(self, config = None):
      ApplicationSession.__init__(self, config)
      self.traceback_app = True
person oberstet    schedule 18.01.2015
comment
Спасибо, но, к сожалению, это не работает. Когда я включаю приведенный выше код, он не вызывает функцию onJoin, поэтому не может получить процедуры. - person Eddie; 19.01.2015
comment
Быстрое исправление, я просто явно передал объект self в качестве первого аргумента, и он работает. Я имею в виду, что вместо ApplicationSession.__init__(config) я назвал ApplicationSession.__init__(self, config). Я рад, что теперь это работает как по волшебству. - person Eddie; 19.01.2015
comment
О, хороший улов. Да, необходимо предоставить self при вызове конструктора базового класса. Я исправил ответ. Извиняюсь. - person oberstet; 19.01.2015