From 00e6f98cf2dc38b3cc3a773f616a7557e0f55360 Mon Sep 17 00:00:00 2001 From: Brett Smith Date: Tue, 6 Jun 2023 14:55:21 -0400 Subject: [PATCH] 20613: Introduce arvados.logging.GoogleHTTPClientFilter Arvados-DCO-1.1-Signed-off-by: Brett Smith --- sdk/python/arvados/logging.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/sdk/python/arvados/logging.py b/sdk/python/arvados/logging.py index 41f64b95f9..c6371f41b9 100644 --- a/sdk/python/arvados/logging.py +++ b/sdk/python/arvados/logging.py @@ -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 -- 2.39.5