Closes #27904: Improved logging statements to defer formatting until needed.
diff --git a/Lib/distutils/command/bdist_dumb.py b/Lib/distutils/command/bdist_dumb.py
index f1bfb24..e9274d9 100644
--- a/Lib/distutils/command/bdist_dumb.py
+++ b/Lib/distutils/command/bdist_dumb.py
@@ -85,7 +85,7 @@
         install.skip_build = self.skip_build
         install.warn_dir = 0
 
-        log.info("installing to %s" % self.bdist_dir)
+        log.info("installing to %s", self.bdist_dir)
         self.run_command('install')
 
         # And make an archive relative to the root of the
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index f03a4e3..5e51ae4 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -363,9 +363,9 @@
 
             ext_name, build_info = ext
 
-            log.warn(("old-style (ext_name, build_info) tuple found in "
-                      "ext_modules for extension '%s'"
-                      "-- please convert to Extension instance" % ext_name))
+            log.warn("old-style (ext_name, build_info) tuple found in "
+                     "ext_modules for extension '%s'"
+                     "-- please convert to Extension instance", ext_name)
 
             if not (isinstance(ext_name, str) and
                     extension_name_re.match(ext_name)):
diff --git a/Lib/distutils/command/config.py b/Lib/distutils/command/config.py
index b1fd09e..4ae153d 100644
--- a/Lib/distutils/command/config.py
+++ b/Lib/distutils/command/config.py
@@ -337,7 +337,7 @@
     If head is not None, will be dumped before the file content.
     """
     if head is None:
-        log.info('%s' % filename)
+        log.info('%s', filename)
     else:
         log.info(head)
     file = open(filename)
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index 9474e9c..fca05d6 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -385,7 +385,7 @@
             else:
                 opt_name = opt_name.translate(longopt_xlate)
                 val = getattr(self, opt_name)
-            log.debug("  %s: %s" % (opt_name, val))
+            log.debug("  %s: %s", opt_name, val)
 
     def finalize_unix(self):
         """Finalizes options for posix platforms."""
diff --git a/Lib/distutils/command/register.py b/Lib/distutils/command/register.py
index 456d50d..0fac94e 100644
--- a/Lib/distutils/command/register.py
+++ b/Lib/distutils/command/register.py
@@ -94,7 +94,7 @@
         '''
         # send the info to the server and report the result
         (code, result) = self.post_to_server(self.build_post_data('verify'))
-        log.info('Server response (%s): %s' % (code, result))
+        log.info('Server response (%s): %s', code, result)
 
     def send_metadata(self):
         ''' Send the metadata to the package index server.
@@ -205,7 +205,7 @@
                 data['email'] = input('   EMail: ')
             code, result = self.post_to_server(data)
             if code != 200:
-                log.info('Server response (%s): %s' % (code, result))
+                log.info('Server response (%s): %s', code, result)
             else:
                 log.info('You will receive an email shortly.')
                 log.info(('Follow the instructions in it to '
@@ -216,7 +216,7 @@
             while not data['email']:
                 data['email'] = input('Your email address: ')
             code, result = self.post_to_server(data)
-            log.info('Server response (%s): %s' % (code, result))
+            log.info('Server response (%s): %s', code, result)
 
     def build_post_data(self, action):
         # figure the data to send - the metadata plus some additional
diff --git a/Lib/distutils/command/sdist.py b/Lib/distutils/command/sdist.py
index f1b8d91..4fd1d47 100644
--- a/Lib/distutils/command/sdist.py
+++ b/Lib/distutils/command/sdist.py
@@ -412,7 +412,7 @@
             log.info(msg)
         for file in files:
             if not os.path.isfile(file):
-                log.warn("'%s' not a regular file -- skipping" % file)
+                log.warn("'%s' not a regular file -- skipping", file)
             else:
                 dest = os.path.join(base_dir, file)
                 self.copy_file(file, dest, link=link)