11
11
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
# See the License for the specific language governing permissions and
13
13
# limitations under the License.
14
-
14
+ import logging
15
15
import random
16
16
import six
17
17
import sys
@@ -83,6 +83,7 @@ def __init__(
83
83
wait_jitter_max = None ,
84
84
before_attempts = None ,
85
85
after_attempts = None ,
86
+ logger = None ,
86
87
):
87
88
88
89
self ._stop_max_attempt_number = (
@@ -110,6 +111,7 @@ def __init__(
110
111
self ._wait_jitter_max = 0 if wait_jitter_max is None else wait_jitter_max
111
112
self ._before_attempts = before_attempts
112
113
self ._after_attempts = after_attempts
114
+ self ._logger = logging .getLogger (__name__ ) is logger is None else logger
113
115
114
116
# TODO add chaining of stop behaviors
115
117
# stop behavior
@@ -256,6 +258,7 @@ def call(self, fn, *args, **kwargs):
256
258
if not self .should_reject (attempt ):
257
259
return attempt .get (self ._wrap_exception )
258
260
261
+ self ._logger .warn (attempt )
259
262
if self ._after_attempts :
260
263
self ._after_attempts (attempt_number )
261
264
@@ -268,6 +271,7 @@ def call(self, fn, *args, **kwargs):
268
271
raise RetryError (attempt )
269
272
else :
270
273
sleep = self .wait (attempt_number , delay_since_first_attempt_ms )
274
+ self ._logger .info (f"Retrying in { sleep / 1000.0 :.2f} seconds." )
271
275
if self ._wait_jitter_max :
272
276
jitter = random .random () * self ._wait_jitter_max
273
277
sleep = sleep + max (0 , jitter )
0 commit comments