From 11e4cab6220c8c503787142f48a352410191de0a Mon Sep 17 00:00:00 2001 From: Mike OConnell <51322993+moconnell1453@users.noreply.github.com> Date: Mon, 14 Sep 2020 11:22:11 -0400 Subject: [PATCH] Added remote IP to logging (#24932) * Add remote IP to logging config Add a new filter to get the remote IP for the current request and include it in log statements SEG-34 * Added line for formatting Added line for formatting SEG-34 --- openedx/core/djangoapps/util/log_utils.py | 14 ++++++++++++++ openedx/core/lib/logsettings.py | 11 +++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/openedx/core/djangoapps/util/log_utils.py b/openedx/core/djangoapps/util/log_utils.py index 2ee2e6af8e9..9406eb6db9b 100644 --- a/openedx/core/djangoapps/util/log_utils.py +++ b/openedx/core/djangoapps/util/log_utils.py @@ -2,11 +2,14 @@ Django-based logging utilities UserIdFilter: A logging.Filter that adds userid to the logging context + +RemoteIpFilter: A logging filter that adds the remote IP to the logging context """ from logging import Filter +from crum import get_current_request from crum import get_current_user @@ -18,3 +21,14 @@ class UserIdFilter(Filter): else: record.userid = None return True + + +class RemoteIpFilter(Filter): + def filter(self, record): + # get IP from context + request = get_current_request() + if request and 'REMOTE_ADDR' in request.META: + record.remoteip = request.META['REMOTE_ADDR'] + else: + record.remoteip = None + return True diff --git a/openedx/core/lib/logsettings.py b/openedx/core/lib/logsettings.py index 0d3a5913265..bb29924ab4c 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] [user %(userid)s] [%(filename)s:%(lineno)d] " + u"[{hostname} %(process)d] [user %(userid)s] [ip %(remoteip)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] [user %(userid)s] %(filename)s:%(lineno)d - %(message)s', + u'[%(name)s] [user %(userid)s] [ip %(remoteip)s] %(filename)s:%(lineno)d - %(message)s', }, 'syslog_format': {'format': syslog_format}, 'raw': {'format': '%(message)s'}, @@ -52,6 +52,9 @@ def get_logger_config(log_dir, }, 'userid_context': { '()': 'openedx.core.djangoapps.util.log_utils.UserIdFilter', + }, + 'remoteip_context': { + '()': 'openedx.core.djangoapps.util.log_utils.RemoteIpFilter', } }, 'handlers': { @@ -59,7 +62,7 @@ def get_logger_config(log_dir, 'level': 'INFO', 'class': 'logging.StreamHandler', 'formatter': 'standard', - 'filters': ['userid_context'], + 'filters': ['userid_context', 'remoteip_context'], 'stream': sys.stderr, }, 'mail_admins': { @@ -72,7 +75,7 @@ def get_logger_config(log_dir, 'class': 'logging.handlers.SysLogHandler', 'address': '/dev/log', 'formatter': 'syslog_format', - 'filters': ['userid_context'], + 'filters': ['userid_context', 'remoteip_context'], 'facility': SysLogHandler.LOG_LOCAL0, }, 'tracking': { -- GitLab