23

このフォーマット文字列のようにログを記録したいとしましょう:

%(levelname)s %(asctime)s %(module)s %(funcName)s %(message)s %(user_id)

これは、次のタイプのロギング コマンドを使用して実行できます。

logging.error('Error fetching information', extra = { 'user_id': 22 } )

これにより、現在のリクエストのログ メッセージに現在のユーザー ID が追加されます。

ただし、すべてのロギング呼び出しに追加の辞書を追加する必要があります。

このコンテキストを django の一般的な関数 (例: ミドルウェア、またはビューのインデックス関数) に追加して、ユーザー ID を持つ追加の辞書が設定され、現在の要求でのすべての以降のログ呼び出しもログに記録する良い方法はありますか?現在の使用者。

4

3 に答える 3

8

https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.pyにThreadLocal ミドルウェアが存在します。これは、現在のリクエストをどこでも利用できるようにする際の問題を解決するのに役立ちます。

したがって、ミドルウェアを MIDDLEWARE_CLASSES 設定に追加し、次のような関数を作成する必要があります。

 from django_tools.middlewares import ThreadLocal
 def log_something(levelname, module, funcname, message):
     user = ThreadLocal.get_current_user()
     # do your logging here. "user" is the user object and the user id is in user.pk
于 2013-04-25T09:01:07.347 に答える