From f0aec2bb59d7079bc823f7eb8b82b4b595843fce Mon Sep 17 00:00:00 2001 From: Mubashir Kazia Date: Thu, 1 Feb 2024 00:53:18 -0500 Subject: [PATCH 1/3] Redact the URL query parameters from the urllib3.connectionpool logs Signed-off-by: Mubashir Kazia --- src/databricks/sql/__init__.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/databricks/sql/__init__.py b/src/databricks/sql/__init__.py index 40bdacf76..87012d933 100644 --- a/src/databricks/sql/__init__.py +++ b/src/databricks/sql/__init__.py @@ -8,6 +8,33 @@ paramstyle = "named" +import re + +class RedactUrlQueryParamsFilter(logging.Filter): + pattern = re.compile(r"(\?|&)([\w-]+)=([^&]+)") + mask = r"\1\2=" + + def __init__(self): + super().__init__() + + def redact(self, string): + return re.sub(self.pattern, self.mask, str(string)) + + def filter(self, record): + record.msg = self.redact(str(record.msg)) + if isinstance(record.args, dict): + for k in record.args.keys(): + record.args[k] = self.redact(record.args[k]) + else: + record.args = tuple( + (self.redact(arg) if isinstance(arg, str) else arg) + for arg in record.args + ) + + return True + +logging.getLogger("urllib3.connectionpool").addFilter(RedactUrlQueryParamsFilter()) + class DBAPITypeObject(object): def __init__(self, *values): From 9849b2a3a3966f3e4d922cfb4229294c4bd11b49 Mon Sep 17 00:00:00 2001 From: Mubashir Kazia Date: Thu, 1 Feb 2024 09:25:53 -0500 Subject: [PATCH 2/3] Fix code formatting Signed-off-by: Mubashir Kazia --- src/databricks/sql/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/databricks/sql/__init__.py b/src/databricks/sql/__init__.py index 87012d933..1a23bce66 100644 --- a/src/databricks/sql/__init__.py +++ b/src/databricks/sql/__init__.py @@ -10,6 +10,7 @@ import re + class RedactUrlQueryParamsFilter(logging.Filter): pattern = re.compile(r"(\?|&)([\w-]+)=([^&]+)") mask = r"\1\2=" @@ -33,6 +34,7 @@ def filter(self, record): return True + logging.getLogger("urllib3.connectionpool").addFilter(RedactUrlQueryParamsFilter()) From cc5aab2b0c13df0fd76ca65d900e41377e8c1978 Mon Sep 17 00:00:00 2001 From: Mubashir Kazia Date: Fri, 2 Feb 2024 14:11:50 -0500 Subject: [PATCH 3/3] Add str check for the log record message arg dict values Signed-off-by: Mubashir Kazia --- src/databricks/sql/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/databricks/sql/__init__.py b/src/databricks/sql/__init__.py index 1a23bce66..cca7d9546 100644 --- a/src/databricks/sql/__init__.py +++ b/src/databricks/sql/__init__.py @@ -25,7 +25,11 @@ def filter(self, record): record.msg = self.redact(str(record.msg)) if isinstance(record.args, dict): for k in record.args.keys(): - record.args[k] = self.redact(record.args[k]) + record.args[k] = ( + self.redact(record.args[k]) + if isinstance(record.arg[k], str) + else record.args[k] + ) else: record.args = tuple( (self.redact(arg) if isinstance(arg, str) else arg)