Tornadoでは、ExceptionはFuture内にカプセル化され、非同期関数の呼び出し元は例外をアンパックするためにFutureを生成する必要があります。非同期関数の長い呼び出し連鎖がある場合、例外が発生する関数名と行を正しく出力するようにログメッセージを取得するにはどうすればよいですか?例えばコルーチンPython3 + Tornado4.3 +ネイティブロギングモジュールの例外のロギングを修正しました
は、以下のコードで:async_func()
で発生した例外がある場合
FORMAT = '%(asctime)s - %(levelname)s - %(filename)s : %(lineno)s'\
' - %(funcName)20s() - %(message)s\n'
logging.basicConfig(format=FORMAT)
...
@gen.coroutine
def layer_2():
return(yield async_func())
@gen.coroutine
def layer_1():
return(yield layer_2())
@gen.coroutine
def main():
try:
yield layer_1()
except Exception as e:
logging.warning('Error: {}'.format(str(e))
、ログメッセージlineno
とfuncName
はmain()
のではなく、async_func()
のものです。
とcatch
のいずれの解決方法もありますか?yield
と致しますか?ありがとう!
編集1:私の質問に対する答えは、トルネードとは何の関係もないかもしれないことに気付きましたが、私はそれが私の場合であるため、ここに含めるだけです。
これは非常に便利です!ありがとうございました!私はこれがあなたが私を助けてくれた2番目の質問だと思います! –