diff --git a/wait_for/__init__.py b/wait_for/__init__.py
index d8d2430..2ad0cd7 100644
--- a/wait_for/__init__.py
+++ b/wait_for/__init__.py
@@ -172,24 +172,26 @@ def wait_for(func, func_args=[], func_kwargs={}, logger=None, **kwargs):
     tries = 0
     out = None
     if not very_quiet:
-        logger.debug("Started '{}' at {}".format(message, st_time))
+        logger.debug("Started %(message)r at %(time)", {'message': message, 'time': st_time})
     while t_delta <= num_sec:
         tries += 1
         if log_on_loop:
-            logger.info("{} -- try {}".format(message, tries))
+            logger.info("%(message)r -- try %(tries)d", {'message': message, 'tries': tries})
         try:
             out = func(*func_args, **func_kwargs)
         except Exception as e:
-            logger.info("wait_for hit an exception: {}: {}".format(type(e).__name__, e))
+            logger.info(
+                "wait_for hit an exception: %(exc_name)s: %(exc)s",
+                {'exc_name': type(e).__name__, 'exc': e})
             if handle_exception:
                 out = fail_condition
                 logger.info("Call failed with following exception, but continuing "
                             "as handle_exception is set to True")
             else:
                 logger.info(
-                    "'{}' took {} tries and {} seconds "
-                    "before failure from an exception.".format(
-                        message, tries, get_time() - st_time))
+                    "%(message)r took %(tries)d tries and %(time).2f seconds "
+                    "before failure from an exception.",
+                    {'message': message, 'tries': tries, 'time': get_time() - st_time})
                 raise
         if out is fail_condition or fail_condition_check(out):
             time.sleep(delay)
@@ -201,26 +203,39 @@ def wait_for(func, func_args=[], func_kwargs={}, logger=None, **kwargs):
         else:
             duration = get_time() - st_time
             if not quiet:
-                logger.debug("Took {:0.2f} to do '{}'".format(duration, message))
+                logger.debug(
+                    "Took %(time).2f to do %(message)r",
+                    {'time': duration, 'message': message})
             if not very_quiet:
                 logger.debug(
-                    "Finished '{}' at {}, {} tries".format(message, st_time + t_delta, tries))
+                    "Finished %(message)r at %(duration).2f, %(tries)d tries",
+                    {'message': message, 'duration': st_time + t_delta, 'tries': tries})
             return WaitForResult(out, duration)
         t_delta = get_time() - st_time
     if not very_quiet:
-        logger.debug("Finished '{}' at {}".format(message, st_time + t_delta))
+        logger.debug(
+            "Finished %(message)r at %(duration).2f",
+            {'message': message, 'duration': st_time + t_delta})
     if not silent_fail:
         logger.error(
-            "Couldn't complete '{}' at {}:{} in time, took {:0.2f}, {} tries".format(
-                message, filename, line_no, t_delta, tries
-            )
+            ("Couldn't complete %(message)r at %(filename)s:%(lineno)d in time, took %(duration).2f"
+            ", %(tries)d tries"),
+            {
+                'message': message,
+                'filename': filename,
+                'lineno': line_no,
+                'duration': t_delta,
+                'tries': tries
+            }
         )
-        logger.error('The last result of the call was: {}'.format(out))
+        logger.error('The last result of the call was: %(result)r', {'result': out})
         raise TimedOutError("Could not do '{}' at {}:{} in time".format(message, filename, line_no))
     else:
-        logger.warning("Could not do '{}' at {}:{} in time ({} tries) but ignoring".format(message,
-            filename, line_no, tries))
-        logger.warning('The last result of the call was: {}'.format(out))
+        logger.warning(
+            "Could not do %(message)r at %(filename)s:%(lineno)d in time (%(tries)d tries) but "
+            "ignoring",
+            {'message': message, 'filename': filename, 'lineno': line_no, 'tries': tries})
+        logger.warning('The last result of the call was: %(result)r', {'result': out})
         return WaitForResult(out, num_sec)
 
 

TODO: Convert logging to use standard string formats (%)
diff --git a/tests/test_simple.py b/tests/test_simple.py
index 0865f84..97f9403 100644
--- a/tests/test_simple.py
+++ b/tests/test_simple.py
@@ -68,7 +68,7 @@ def test_lambda_default_message_from_src(error_logger):
     assert expected_message_content in str(excinfo.value)
 
     # Check we got the lamda code in the error log
-    error_log_messages = [call[0][0] for call in error_logger.call_args_list]
+    error_log_messages = [call[0][0] % call[0][1] for call in error_logger.call_args_list]
     for message in error_log_messages:
         if expected_message_content in message:
             break

pip install -e .
parse_log_pytest
requirements.txt
pytest pytest-cov
apt-get update apt-get install -y gcc
3.5
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
coverage==6.2
importlib-metadata==4.8.3
iniconfig==1.1.1
packaging==21.3
parsedatetime==2.6
pluggy==1.0.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
pytest-cov==4.0.0
six==1.17.0
tomli==1.2.3
typing_extensions==4.1.1
-e git+https://github.com/RedHatQE/wait_for.git@e027318cd4202c5288246e12e591a86e3296115f#egg=wait_for
zipp==3.6.0

name: wait_for
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - coverage==6.2
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - packaging==21.3
      - parsedatetime==2.6
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - six==1.17.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - zipp==3.6.0
prefix: /opt/conda/envs/wait_for

tests/test_simple.py::test_lambda_default_message_from_src
tests/test_simple.py::test_simple_wait tests/test_simple.py::test_lambda_wait tests/test_simple.py::test_lambda_wait_silent_fail tests/test_simple.py::test_lambda_long_wait tests/test_simple.py::test_partial tests/test_simple.py::test_callable_fail_condition tests/test_simple.py::test_wait_decorator tests/test_simple.py::test_wait_decorator_noparams tests/test_simple.py::test_nonnumeric_numsec_timedelta_via_string
wait_for/__init__.py
wait_for/__init__.py