diff --git a/openedx/core/djangoapps/util/log_utils.py b/openedx/core/djangoapps/util/log_utils.py new file mode 100644 index 0000000000..1e41fb51f4 --- /dev/null +++ b/openedx/core/djangoapps/util/log_utils.py @@ -0,0 +1,17 @@ +""" +Django-based logging utilities + +UserIdFilter: A logging.Filter that adds userid to the logging context +""" +from logging import Filter +from crum import get_current_user + + +class UserIdFilter(Filter): + def filter(self, record): + user = get_current_user() + if user and user.pk: + record.userid = user.pk + else: + record.userid = None + return True diff --git a/openedx/core/lib/logsettings.py b/openedx/core/lib/logsettings.py index b88973cfd4..aa40e15856 100644 --- a/openedx/core/lib/logsettings.py +++ b/openedx/core/lib/logsettings.py @@ -30,7 +30,7 @@ def get_logger_config(log_dir, hostname = platform.node().split(".")[0] syslog_format = (u"[service_variant={service_variant}]" u"[%(name)s][env:{logging_env}] %(levelname)s " - u"[{hostname} %(process)d] [%(filename)s:%(lineno)d] " + u"[{hostname} %(process)d] [user %(userid)s] [%(filename)s:%(lineno)d] " u"- %(message)s").format(service_variant=service_variant, logging_env=logging_env, hostname=hostname) @@ -41,7 +41,7 @@ def get_logger_config(log_dir, 'formatters': { 'standard': { 'format': u'%(asctime)s %(levelname)s %(process)d ' - u'[%(name)s] %(filename)s:%(lineno)d - %(message)s', + u'[%(name)s] [user %(userid)s] %(filename)s:%(lineno)d - %(message)s', }, 'syslog_format': {'format': syslog_format}, 'raw': {'format': '%(message)s'}, @@ -49,6 +49,9 @@ def get_logger_config(log_dir, 'filters': { 'require_debug_false': { '()': 'django.utils.log.RequireDebugFalse', + }, + 'userid_context': { + '()': 'openedx.core.djangoapps.util.log_utils.UserIdFilter', } }, 'handlers': { @@ -56,6 +59,7 @@ def get_logger_config(log_dir, 'level': 'INFO', 'class': 'logging.StreamHandler', 'formatter': 'standard', + 'filters': ['userid_context'], 'stream': sys.stderr, }, 'mail_admins': { @@ -68,6 +72,7 @@ def get_logger_config(log_dir, 'class': 'logging.handlers.SysLogHandler', 'address': '/dev/log', 'formatter': 'syslog_format', + 'filters': ['userid_context'], 'facility': SysLogHandler.LOG_LOCAL0, }, 'tracking': {