From 682036321d47c0d84830174a261704e3f85867cd Mon Sep 17 00:00:00 2001
From: Henrik Levkowetz <henrik@levkowetz.com>
Date: Fri, 12 Jun 2020 14:41:41 +0000
Subject: [PATCH] Reorganized the python logging setup slightly, and added a
 possibility to configure logging levels for individual loggers in
 settings_local.py  - Legacy-Id: 17973

---
 bin/commitlog     | 14 +++++++++++++-
 ietf/settings.py  | 31 ++++++++++++++++++++++++++++---
 ietf/utils/log.py |  5 +++++
 3 files changed, 46 insertions(+), 4 deletions(-)

diff --git a/bin/commitlog b/bin/commitlog
index ee85812f2..e83fd9818 100755
--- a/bin/commitlog
+++ b/bin/commitlog
@@ -1,5 +1,17 @@
 #!/bin/bash
+# -*- indent-with-tabs: 1 -*-
+date
 cur=$(svn info | awk '/^Revision:/ { print $2 }')
-svn log $PWD -r ${2:-HEAD}:${1:-$((cur-100))} | sed -n -e '1,/^Set version info and settings back to development mode/p' | sed -r 's/^(----------|r[0-9]+).*$/\n/' | sed '/./,/^$/!d' | sed '1,/./s/^/  * /;/^$/,/./s/^/  * /;/^  \* $/d' | sed -e :a -e '$!N;s/\n([A-Za-z0-9])/ \\1/;ta' -e 'P;D' | head -n -1 | fold -sw76 | sed -r 's/^([^ ].*)$/    &/' | sed -r 's/^  \* /\n  * /'
+svn log $PWD -r ${2:-HEAD}:${1:-$((cur-100))} \
+	| sed -r 's/^(----------|r[0-9]+).*$/\n/'  \
+	| sed '/./,/^$/!d'  \
+	| sed '1,/./s/^/  * /;/^$/,/./s/^/  * /;/^  \* $/d'  \
+	| sed -e :a -e '$!N;s/\n([A-Za-z0-9])/ \\1/;ta' -e 'P;D'  \
+	| head -n -1  \
+	| fold -sw1000 \
+	| tac \
+	| fold -sw76  \
+	| sed -r 's/^([^ ].*)$/    &/'  \
+	| sed -r 's/^  \* /\n  * /'
 echo ""
 TZ=UTC date +" -- Henrik Levkowetz <henrik@levkowetz.com>  %d %b %Y %H:%M:%S %z"
diff --git a/ietf/settings.py b/ietf/settings.py
index ea0e052e5..3db088acc 100644
--- a/ietf/settings.py
+++ b/ietf/settings.py
@@ -224,7 +224,7 @@ LOGGING = {
     #
     'loggers': {
         'django': {
-            'handlers': ['console', 'mail_admins'],
+            'handlers': ['debug_console', 'mail_admins'],
             'level': 'INFO',
         },
         'django.server': {
@@ -232,15 +232,26 @@ LOGGING = {
             'level': 'INFO',
             'propagate': False,
         },
+ 	'oidc_provider': {
+	    'handlers': ['console', ],
+	    'level': 'DEBUG',
+	},
     },
     #
     # No logger filters
     #
     'handlers': {
         'console': {
-            'level': 'INFO',
+            'level': 'DEBUG',
+            'class': 'logging.StreamHandler',
+            'formatter': 'plain',
+        },
+        'debug_console': {
+            # Active only when DEBUG=True
+            'level': 'DEBUG',
             'filters': ['require_debug_true'],
             'class': 'logging.StreamHandler',
+            'formatter': 'plain',
         },
         'django.server': {
             'level': 'INFO',
@@ -283,10 +294,23 @@ LOGGING = {
         'django.server': {
             '()': 'django.utils.log.ServerFormatter',
             'format': '[%(server_time)s] %(message)s',
-        }
+        },
+        'plain': {
+            'style': '{',
+            'format': '{levelname}: {name}:{lineno}: {message}',
+        },
     },
 }
 
+# This should be overridden by settings_local for any logger where debug (or
+# other) custom log settings are wanted.  Use "ietf/manage.py showloggers -l"
+# to show registered loggers.  The content here should match the levels above
+# and is shown as an example:
+UTILS_LOGGER_LEVELS = {
+    'django':           'INFO',
+    'django.server':    'INFO',
+}
+
 # End logging
 # ------------------------------------------------------------------------
 
@@ -1160,3 +1184,4 @@ if SERVER_MODE != 'production':
         MIDDLEWARE = MIDDLEWARE + ['django_cprofile_middleware.middleware.ProfilerMiddleware', ]
     except ImportError:
         pass
+
diff --git a/ietf/utils/log.py b/ietf/utils/log.py
index 6decaa7fa..ba0bd6079 100644
--- a/ietf/utils/log.py
+++ b/ietf/utils/log.py
@@ -22,6 +22,11 @@ from django.conf import settings
 
 import debug                            # pyflakes:ignore
 
+for logger, level in settings.UTILS_LOGGER_LEVELS.items():
+    logger = logging.getLogger(logger)
+    debug.say(" Setting %s logging level to %s" % (logger.name, level))
+    logger.setLevel(level)
+
 def getclass(frame):
     cls = None
     argnames, varargs, varkw, defaults  = inspect.getargvalues(frame)