crossbar check
検証stdout: log
しstderr: log
ますが、なぜエラーが記録されないのかわかりません。
私は通常以下のようにしますが、あなたの設定はよりきれいで便利に見えます。
設定
これに従ってください ( IntelliJ での Crossbar.io アプリのデバッグ)。使用している IDE に対しても同様のことを行いますが、クロスバー ルーターには CPython ではなく PyPy を使用することをお勧めします。
ロギング
これに従ってください ( Logging WAMP worker Trace Back Error )。Trace Back Error ロギング機能を有効にするだけです。以下のような単純な関数import traceback
を使用するtry except
か、単に作成することができます。__init__
class MyComponent(ApplicationSession):
def __init__(self, config = None):
ApplicationSession.__init__(self, config)
self.traceback_app = True
以下は、完全な動作例です。
エラーログ
.crossbar/config.yaml
controller: {}
workers:
- realms:
- name: realm1
roles:
- name: anonymous
permissions:
- {call: true, publish: true, register: true, subscribe: true, uri: '*'}
transports:
- endpoint: {port: 8080, type: tcp}
paths:
/: {directory: .., type: static}
ws: {type: websocket}
type: web
type: router
- arguments: [backend.py]
executable: ../../../.pyenv/versions/autobahn/bin/python3
options:
watch:
action: restart
directories: [..]
workdir: ..
type: guest
backend.py
from autobahn.asyncio.wamp import ApplicationSession
from autobahn import wamp
from asyncio import coroutine
import logging
class MyComponent(ApplicationSession):
def __init__(self, config = None):
ApplicationSession.__init__(self, config)
self.traceback_app = True
@wamp.register("com.myapp.add2")
def add2(self, x, y):
if type(y) is str:
error = ' Sorry! Python can not add int with something else :('
logging.critical(error)
return error
return x + y
@coroutine
def onJoin(self, details):
res = yield from self.register(self)
print("{} procedures registered.".format(len(res)))
if __name__ == '__main__':
from autobahn.asyncio.wamp import ApplicationRunner
runner = ApplicationRunner(url="ws://localhost:8080/ws", realm="realm1")
runner.run(MyComponent)
frontend.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<script>AUTOBAHN_DEBUG = false;</script>
<script src="http://autobahn.s3.amazonaws.com/autobahnjs/latest/autobahn.min.jgz"></script>
<script>
var connection = new autobahn.Connection({
url: "ws://localhost:8080/ws",
realm: "realm1"
});
connection.onopen = function (session, details) {
// Should work
session.call("com.myapp.add2", [1, 2]).then(session.log);
// Expected to log an error
session.call("com.myapp.add2", [2, "three"]).then(session.log);
// Expected to log the trace back error
session.call("com.myapp.add2", ["one", 5]).then(session.log);
};
connection.onclose = function (reason, details) {
console.log("Connection lost: " + reason);
};
connection.open();
</script>
</body>
</html>