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})
This commit is contained in:
parent
1c39894527
commit
16f9122b7b
|
@ -16,6 +16,11 @@
|
|||
|
||||
import logging
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import connection
|
||||
|
||||
from hobo.middleware.utils import StoreRequestMiddleware
|
||||
|
||||
|
||||
class SettingsLogLevel(int):
|
||||
def __new__(cls, default_log_level, debug_setting='DEBUG'):
|
||||
|
@ -60,57 +65,55 @@ class RequestContextFilter(logging.Filter):
|
|||
|
||||
Inspired by django-log-request-id
|
||||
'''
|
||||
if (hasattr(record, 'user')
|
||||
and hasattr(record.user, 'is_authenticated')
|
||||
and record.user.is_authenticated()):
|
||||
user = record.user
|
||||
del record.user
|
||||
else:
|
||||
user = None
|
||||
|
||||
from hobo.middleware.utils import StoreRequestMiddleware
|
||||
from django.conf import settings
|
||||
from django.db import connection
|
||||
record.tenant = self.DEFAULT_TENANT
|
||||
# lookup request from record then StoreRequestMiddleware
|
||||
if not hasattr(record, 'request'):
|
||||
record.request = StoreRequestMiddleware.get_request()
|
||||
request = record.request
|
||||
|
||||
# lookup user from record then from request
|
||||
if not hasattr(record, 'user'):
|
||||
if (hasattr(request, 'user')
|
||||
and hasattr(request.user, 'is_authenticated')
|
||||
and request.user.is_authenticated()):
|
||||
record.user = request.user
|
||||
else:
|
||||
record.user = None
|
||||
user = record.user
|
||||
|
||||
# lookup tenant
|
||||
tenant = getattr(connection, 'tenant', None)
|
||||
record.tenant = getattr(tenant, 'domain_url', self.DEFAULT_TENANT)
|
||||
|
||||
record.application = getattr(settings, 'PROJECT_NAME', self.DEFAULT_APPLICATION)
|
||||
|
||||
# populate request attributes
|
||||
record.ip = self.DEFAULT_IP
|
||||
record.path = self.DEFAULT_PATH
|
||||
record.application = getattr(settings, 'PROJECT_NAME', self.DEFAULT_APPLICATION)
|
||||
record.request_id = self.DEFAULT_REQUEST_ID
|
||||
if request is not None:
|
||||
record.ip = request.META.get('REMOTE_ADDR', self.DEFAULT_IP)
|
||||
record.path = request.get_full_path()
|
||||
record.request_id = 'r:' + hex(id(request))[2:].upper()
|
||||
|
||||
# populate user attributes
|
||||
record.user_name = self.DEFAULT_USER_NAME
|
||||
record.user_email = self.DEFAULT_USER_EMAIL
|
||||
record.user_display_name = self.DEFAULT_USER_DISPLAY_NAME
|
||||
record.user_uuid = self.DEFAULT_USER_UUID
|
||||
record.user = self.DEFAULT_USER
|
||||
|
||||
if getattr(getattr(connection, 'tenant', None), 'domain_url', None):
|
||||
record.tenant = connection.tenant.domain_url
|
||||
request = StoreRequestMiddleware.get_request()
|
||||
|
||||
if request is not None:
|
||||
if not hasattr(record, 'request'):
|
||||
record.request = request
|
||||
record.ip = request.META.get('REMOTE_ADDR', self.DEFAULT_IP)
|
||||
record.path = request.get_full_path()
|
||||
record.request_id = 'r:' + hex(id(request))[2:].upper()
|
||||
# if caller already passed an user, it means it knows better
|
||||
if user is None and hasattr(request, 'user') and request.user.is_authenticated():
|
||||
user = request.user
|
||||
|
||||
if user:
|
||||
if getattr(user, 'email', None):
|
||||
record.user_email = user.email
|
||||
record.user = user.email
|
||||
if getattr(user, 'username', None):
|
||||
record.user_name = user.username
|
||||
record.user = user.username
|
||||
if hasattr(user, 'get_full_name') and user.get_full_name():
|
||||
record.user_display_name = user.get_full_name()
|
||||
if user is not None:
|
||||
if hasattr(user, 'saml_identifiers'):
|
||||
saml_identifiers = user.saml_identifiers.all()
|
||||
if saml_identifiers:
|
||||
record.user_uuid = saml_identifiers[0].name_id
|
||||
if record.user == self.DEFAULT_USER:
|
||||
record.user = record.user_uuid[:7]
|
||||
saml_identifier = user.saml_identifiers.first()
|
||||
if saml_identifier:
|
||||
record.user_uuid = saml_identifier.name_id
|
||||
record.user = record.user_uuid[:6]
|
||||
if hasattr(user, 'get_full_name') and user.get_full_name():
|
||||
record.user = record.user_display_name = user.get_full_name()
|
||||
if getattr(user, 'email', None):
|
||||
record.user = record.user_email = user.email
|
||||
if getattr(user, 'username', None):
|
||||
record.user = record.user_name = user.username
|
||||
return True
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue