私は、トルネードの要求レベルのコンテキストを設定する方法を探しています。 これは、すべてのログ行(例えばuser_id
のような)でいくつかの要求属性を出力する目的でログを出力するのに便利です。 私はweb.RequestHandler
のコンテキストを設定し、この要求が呼び出された他のコルーチンにアクセスしたいと思います。竜巻の要求レベルのコンテキストを使用
class WebRequestHandler(web.RequestHandler):
@gen.coroutine
def post(self):
RequestContext.test_mode = self.application.settings.get('test_mode', False)
RequestContext.corr_id = self.request.header.get('X-Request-ID')
result = yield some_func()
self.write(result)
@gen.coroutine
def some_func()
if RequestContext.test_mode:
print "In test mode"
do more async calls
現在、私は、コードのすべての部分は、右のコンテキストでモニタリングとロギングを行うことができますこの方法を下流に呼び出して、すべての非同期関数にcontext
オブジェクト(値がdict
)を渡します。 私はよりクリーンでシンプルなソリューションを探しています。
おかげ
アレックス
現在のところ、コンテキストオブジェクト(値付きのdict)をすべての非同期関数呼び出しにプッシュすることで、 'RequestContext'概念を実装しています。 トラフィックが多い場合でも正常に動作します。 Tornadoは 'StackContext'を' yield'から再開できるように管理しています。要求内のすべての 'yield'呼び出しに見える何らかの' GlobalStackContext'を作成する方法があることを望みます。 – AlexV