105 lines
3.9 KiB
Python
105 lines
3.9 KiB
Python
import logging
|
|
|
|
|
|
class SettingsLogLevel(int):
|
|
def __new__(cls, default_log_level, debug_setting='DEBUG'):
|
|
return super(SettingsLogLevel, cls).__new__(
|
|
cls, getattr(logging, default_log_level))
|
|
|
|
def __init__(self, default_log_level, debug_setting='DEBUG'):
|
|
self.debug_setting = debug_setting
|
|
super(SettingsLogLevel, self).__init__(
|
|
getattr(logging, default_log_level))
|
|
|
|
old_getEffectiveLevel = logging.Logger.getEffectiveLevel
|
|
|
|
|
|
def getEffectiveLevel(self):
|
|
level = old_getEffectiveLevel(self)
|
|
if isinstance(level, SettingsLogLevel):
|
|
from django.conf import settings
|
|
debug = getattr(settings, level.debug_setting, False)
|
|
if debug:
|
|
return logging.DEBUG
|
|
return level
|
|
|
|
# monkeypatch default getEffectiveLevel to get our new behaviour
|
|
logging.Logger.getEffectiveLevel = getEffectiveLevel
|
|
|
|
|
|
class RequestContextFilter(logging.Filter):
|
|
DEFAULT_TENANT = '-'
|
|
DEFAULT_IP = '-'
|
|
DEFAULT_PATH = '-'
|
|
DEFAULT_REQUEST_ID = '-'
|
|
DEFAULT_USER = "-"
|
|
DEFAULT_USER_NAME = '-'
|
|
DEFAULT_USER_EMAIL = '-'
|
|
DEFAULT_USER_DISPLAY_NAME = '-'
|
|
DEFAULT_USER_UUID = '-'
|
|
DEFAULT_APPLICATION = 'django'
|
|
|
|
def filter(self, record):
|
|
'''Add username, ip and request ID to the log record.
|
|
|
|
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
|
|
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
|
|
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 not request is 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 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]
|
|
return True
|
|
|
|
|
|
class ForceDebugFilter(logging.Filter):
|
|
def filter(self, record):
|
|
record.levelno = logging.DEBUG
|
|
record.levelname = 'DEBUG'
|
|
return super(ForceDebugFilter, self).filter(record)
|