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