20862: Merge branch 'main' into 20862-google-api-client
[arvados.git] / sdk / python / arvados / logging.py
index 41f64b95f9b736ccf0cf45803d11b588c2af6b13..c6371f41b95695615fb745747d8ad4f5de6b0996 100644 (file)
@@ -9,3 +9,23 @@ log_format = '%(asctime)s %(name)s[%(process)d] %(levelname)s: %(message)s'
 log_date_format = '%Y-%m-%d %H:%M:%S'
 log_handler = logging.StreamHandler()
 log_handler.setFormatter(logging.Formatter(log_format, log_date_format))
+
+class GoogleHTTPClientFilter:
+    """Common googleapiclient.http log filters for Arvados clients
+
+    This filter makes `googleapiclient.http` log messages more useful for
+    typical Arvados applications. Currently it only changes the level of
+    retry messages (to INFO by default), but its functionality may be
+    extended in the future. Typical usage looks like:
+
+        logging.getLogger('googleapiclient.http').addFilter(GoogleHTTPClientFilter())
+    """
+    def __init__(self, *, retry_level='INFO'):
+        self.retry_levelname = retry_level
+        self.retry_levelno = getattr(logging, retry_level)
+
+    def filter(self, record):
+        if record.msg.startswith(('Sleeping ', 'Retry ')):
+            record.levelname = self.retry_levelname
+            record.levelno = self.retry_levelno
+        return True