17

django 1.3。、python2.6を使用しています

ここのdjangoドキュメント
https://docs.djangoproject.com/en/1.3/topics/logging/#django-request
には、メッセージにはステータスとリクエストという追加のコンテキストがあると記載されています。
これらをデバッグファイルに表示するにはどうすればよいですか?ロギング設定で次のようなものを試しました:

'formatters': {        
        'simple_debug': {
            'format': '[%(asctime)s] %(levelname)s %(module)s %(message)s %(request.user)s',        
        }
    },

しかし、それは全体的なロギングが失敗する原因になります(つまり、ロギング出力は発生しません)


編集: 質問を送信した直後に私はこれに出くわしました:http: //groups.google.com/group/django-users/browse_thread/thread/af682beb1e4af7f6/ace3338348e92a21

誰かが説明/詳しく説明するのを手伝ってもらえますか

ドキュメントからの引用はすべて、django.requestが使用されるdjango内のすべての場所で、リクエストが追加の一部として明示的に渡されることを意味します。

リクエストは、追加の一部として明示的にどこに渡されますか?

4

2 に答える 2

28

request.user%-formattingはそれを処理しないため、フォーマット文字列で使用することはできません。次のようなフォーマット文字列を使用できます

'[%(asctime)s] %(levelname)s %(module)s %(message)s %(user)s'

そして、ロギングコールでは、次のようなものを使用します

logger.debug('My message with %s', 'args', extra={'user': request.user})

extradictはロギングイベントレコードにマージされ、最終的に属性userになります。これは、フォーマット文字列を介して取得され、ログに表示されます。

ロガーを使用している場合django.request、status_codeとリクエストはextraDjangoによってdictで渡されます。が必要な場合はrequest.user、おそらく次のlogging.Filterような機能を追加する必要があります。

class RequestUserFilter(logging.Filter):
    def filter(self, record):
        record.user = record.request.user
        return True

フォーマットされた出力でユーザーを表示できるようにします。

于 2012-04-24T08:57:52.933 に答える
6

django-requestloggingミドルウェアプラグインを使用すると、すべてのロギング呼び出しを調整requestしてパラメーターを追加しなくても、リクエスト関連の情報を簡単にログに記録できextraます。その場合は、ロガーを構成するだけです。

django-requestloggingを使用すると、次のアイテムをログに記録できます。

  • ユーザー名
  • http_user_agent
  • path_info
  • remote_add
  • request_method
  • server_protocol
于 2015-12-02T09:23:02.557 に答える