Projet

Général

Profil

0003-logger-improve-logic-in-RequestContextFilter-31108.patch

Benjamin Dauvergne, 08 mars 2019 01:42

Télécharger (5,15 ko)

Voir les différences:

Subject: [PATCH 3/3] logger: improve logic in RequestContextFilter (#31108)

Previous logic forbid  passing explicit user and request in the log call
like that :

   logger.info('message', extra={'request': request, 'user': user})
 hobo/logger.py | 85 ++++++++++++++++++++++++++------------------------
 1 file changed, 44 insertions(+), 41 deletions(-)
hobo/logger.py
16 16

  
17 17
import logging
18 18

  
19
from django.conf import settings
20
from django.db import connection
21

  
22
from hobo.middleware.utils import StoreRequestMiddleware
23

  
19 24

  
20 25
class SettingsLogLevel(int):
21 26
    def __new__(cls, default_log_level, debug_setting='DEBUG'):
......
60 65

  
61 66
           Inspired by django-log-request-id
62 67
        '''
63
        if (hasattr(record, 'user')
64
                and hasattr(record.user, 'is_authenticated')
65
                and record.user.is_authenticated()):
66
            user = record.user
67
            del record.user
68
        else:
69
            user = None
70

  
71
        from hobo.middleware.utils import StoreRequestMiddleware
72
        from django.conf import settings
73
        from django.db import connection
74
        record.tenant = self.DEFAULT_TENANT
68

  
69
        # lookup request from record then StoreRequestMiddleware
70
        if not hasattr(record, 'request'):
71
            record.request = StoreRequestMiddleware.get_request()
72
        request = record.request
73

  
74
        # lookup user from record then from request
75
        if not hasattr(record, 'user'):
76
            if (hasattr(request, 'user')
77
                    and hasattr(request.user, 'is_authenticated')
78
                    and request.user.is_authenticated()):
79
                record.user = request.user
80
            else:
81
                record.user = None
82
        user = record.user
83

  
84
        # lookup tenant
85
        tenant = getattr(connection, 'tenant', None)
86
        record.tenant = getattr(tenant, 'domain_url', self.DEFAULT_TENANT)
87

  
88
        record.application = getattr(settings, 'PROJECT_NAME', self.DEFAULT_APPLICATION)
89

  
90
        # populate request attributes
75 91
        record.ip = self.DEFAULT_IP
76 92
        record.path = self.DEFAULT_PATH
77
        record.application = getattr(settings, 'PROJECT_NAME', self.DEFAULT_APPLICATION)
78 93
        record.request_id = self.DEFAULT_REQUEST_ID
79
        record.user_name = self.DEFAULT_USER_NAME
80
        record.user_email = self.DEFAULT_USER_EMAIL
81
        record.user_display_name = self.DEFAULT_USER_DISPLAY_NAME
82
        record.user_uuid = self.DEFAULT_USER_UUID
83
        record.user = self.DEFAULT_USER
84

  
85
        if getattr(getattr(connection, 'tenant', None), 'domain_url', None):
86
            record.tenant = connection.tenant.domain_url
87
        request = StoreRequestMiddleware.get_request()
88

  
89 94
        if request is not None:
90
            if not hasattr(record, 'request'):
91
                record.request = request
92 95
            record.ip = request.META.get('REMOTE_ADDR', self.DEFAULT_IP)
93 96
            record.path = request.get_full_path()
94 97
            record.request_id = 'r:' + hex(id(request))[2:].upper()
95
            # if caller already passed an user, it means it knows better
96
            if user is None and hasattr(request, 'user') and request.user.is_authenticated():
97
                user = request.user
98 98

  
99
        if user:
99
        # populate user attributes
100
        record.user_name = self.DEFAULT_USER_NAME
101
        record.user_email = self.DEFAULT_USER_EMAIL
102
        record.user_display_name = self.DEFAULT_USER_DISPLAY_NAME
103
        record.user_uuid = self.DEFAULT_USER_UUID
104
        record.user = self.DEFAULT_USER
105
        if user is not None:
106
            if hasattr(user, 'saml_identifiers'):
107
                saml_identifier = user.saml_identifiers.first()
108
                if saml_identifier:
109
                    record.user_uuid = saml_identifier.name_id
110
                    record.user = record.user_uuid[:6]
111
            if hasattr(user, 'get_full_name') and user.get_full_name():
112
                record.user = record.user_display_name = user.get_full_name()
100 113
            if getattr(user, 'email', None):
101
                record.user_email = user.email
102
                record.user = user.email
114
                record.user = record.user_email = user.email
103 115
            if getattr(user, 'username', None):
104
                record.user_name = user.username
105
                record.user = user.username
106
            if hasattr(user, 'get_full_name') and user.get_full_name():
107
                record.user_display_name = user.get_full_name()
108
            if hasattr(user, 'saml_identifiers'):
109
                saml_identifiers = user.saml_identifiers.all()
110
                if saml_identifiers:
111
                    record.user_uuid = saml_identifiers[0].name_id
112
                    if record.user == self.DEFAULT_USER:
113
                        record.user = record.user_uuid[:7]
116
                record.user = record.user_name = user.username
114 117
        return True
115 118

  
116 119

  
117
-