From dd917f84e3775596049e09746f32053c50b3d422 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Wed, 31 Aug 2016 08:22:29 +0100 Subject: [PATCH] Closes #27904: Improved logging statements to defer formatting until needed. --- Doc/library/contextlib.rst | 4 ++-- Doc/library/shutil.rst | 2 +- Doc/library/typing.rst | 2 +- Doc/whatsnew/3.2.rst | 4 ++-- Lib/asyncio/base_events.py | 4 ++-- Lib/distutils/archive_util.py | 2 +- Lib/distutils/cmd.py | 3 +-- Lib/distutils/command/bdist_dumb.py | 2 +- Lib/distutils/command/build_ext.py | 6 +++--- Lib/distutils/command/config.py | 2 +- Lib/distutils/command/install.py | 2 +- Lib/distutils/command/register.py | 6 +++--- Lib/distutils/command/sdist.py | 2 +- Tools/ssl/test_multiple_versions.py | 6 +++--- setup.py | 4 ++-- 15 files changed, 25 insertions(+), 26 deletions(-) diff --git a/Doc/library/contextlib.rst b/Doc/library/contextlib.rst index 810cea8ba48..dd34c96c8f8 100644 --- a/Doc/library/contextlib.rst +++ b/Doc/library/contextlib.rst @@ -590,10 +590,10 @@ single definition:: self.name = name def __enter__(self): - logging.info('Entering: {}'.format(self.name)) + logging.info('Entering: %s', self.name) def __exit__(self, exc_type, exc, exc_tb): - logging.info('Exiting: {}'.format(self.name)) + logging.info('Exiting: %s', self.name) Instances of this class can be used as both a context manager:: diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index a1cf2413276..fefd6abd72d 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -425,7 +425,7 @@ Another example that uses the *ignore* argument to add a logging call:: import logging def _logpath(path, names): - logging.info('Working in %s' % path) + logging.info('Working in %s', path) return [] # nothing will be ignored copytree(source, destination, ignore=_logpath) diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index 3eaf166d472..d902a153356 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -204,7 +204,7 @@ A user-defined class can be defined as a generic class. return self.value def log(self, message: str) -> None: - self.logger.info('{}: {}'.format(self.name, message)) + self.logger.info('%s: %s', self.name, message) ``Generic[T]`` as a base class defines that the class ``LoggedVar`` takes a single type parameter ``T`` . This also makes ``T`` valid as a type within the diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst index 9f3584dc9fb..3d237ea21a5 100644 --- a/Doc/whatsnew/3.2.rst +++ b/Doc/whatsnew/3.2.rst @@ -1253,9 +1253,9 @@ definition:: @contextmanager def track_entry_and_exit(name): - logging.info('Entering: {}'.format(name)) + logging.info('Entering: %s', name) yield - logging.info('Exiting: {}'.format(name)) + logging.info('Exiting: %s', name) Formerly, this would have only been usable as a context manager:: diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index 0916da8b0ae..918b8695264 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -1069,7 +1069,7 @@ class BaseEventLoop(events.AbstractEventLoop): transport = yield from self._make_subprocess_transport( protocol, cmd, True, stdin, stdout, stderr, bufsize, **kwargs) if self._debug: - logger.info('%s: %r' % (debug_log, transport)) + logger.info('%s: %r', debug_log, transport) return transport, protocol @coroutine @@ -1099,7 +1099,7 @@ class BaseEventLoop(events.AbstractEventLoop): protocol, popen_args, False, stdin, stdout, stderr, bufsize, **kwargs) if self._debug: - logger.info('%s: %r' % (debug_log, transport)) + logger.info('%s: %r', debug_log, transport) return transport, protocol def get_exception_handler(self): diff --git a/Lib/distutils/archive_util.py b/Lib/distutils/archive_util.py index bed1384900b..78ae5757c36 100644 --- a/Lib/distutils/archive_util.py +++ b/Lib/distutils/archive_util.py @@ -171,7 +171,7 @@ def make_zipfile(base_name, base_dir, verbose=0, dry_run=0): path = os.path.normpath(os.path.join(dirpath, name)) if os.path.isfile(path): zip.write(path, path) - log.info("adding '%s'" % path) + log.info("adding '%s'", path) zip.close() return zip_filename diff --git a/Lib/distutils/cmd.py b/Lib/distutils/cmd.py index c89d5efc45e..b5d9dc387dd 100644 --- a/Lib/distutils/cmd.py +++ b/Lib/distutils/cmd.py @@ -329,8 +329,7 @@ class Command: # -- External world manipulation ----------------------------------- def warn(self, msg): - log.warn("warning: %s: %s\n" % - (self.get_command_name(), msg)) + log.warn("warning: %s: %s\n", self.get_command_name(), msg) def execute(self, func, args, msg=None, level=1): util.execute(func, args, msg, dry_run=self.dry_run) diff --git a/Lib/distutils/command/bdist_dumb.py b/Lib/distutils/command/bdist_dumb.py index f1bfb249235..e9274d925af 100644 --- a/Lib/distutils/command/bdist_dumb.py +++ b/Lib/distutils/command/bdist_dumb.py @@ -85,7 +85,7 @@ class bdist_dumb(Command): 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 f03a4e31d8d..5e51ae4ba15 100644 --- a/Lib/distutils/command/build_ext.py +++ b/Lib/distutils/command/build_ext.py @@ -363,9 +363,9 @@ class build_ext(Command): 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 b1fd09e0160..4ae153d1943 100644 --- a/Lib/distutils/command/config.py +++ b/Lib/distutils/command/config.py @@ -337,7 +337,7 @@ def dump_file(filename, head=None): 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 9474e9c5997..fca05d69c61 100644 --- a/Lib/distutils/command/install.py +++ b/Lib/distutils/command/install.py @@ -385,7 +385,7 @@ class install(Command): 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 456d50d519a..0fac94e9e54 100644 --- a/Lib/distutils/command/register.py +++ b/Lib/distutils/command/register.py @@ -94,7 +94,7 @@ class register(PyPIRCCommand): ''' # 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 @@ Your selection [default 1]: ''', log.INFO) 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 @@ Your selection [default 1]: ''', log.INFO) 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 f1b8d91977b..4fd1d4715de 100644 --- a/Lib/distutils/command/sdist.py +++ b/Lib/distutils/command/sdist.py @@ -412,7 +412,7 @@ class sdist(Command): 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) diff --git a/Tools/ssl/test_multiple_versions.py b/Tools/ssl/test_multiple_versions.py index dd57dcf18b8..30d5fcf2e0b 100644 --- a/Tools/ssl/test_multiple_versions.py +++ b/Tools/ssl/test_multiple_versions.py @@ -105,11 +105,11 @@ class BuildSSL: def _subprocess_call(self, cmd, stdout=subprocess.DEVNULL, env=None, **kwargs): - log.debug("Call '{}'".format(" ".join(cmd))) + log.debug("Call '%s'", " ".join(cmd)) return subprocess.check_call(cmd, stdout=stdout, env=env, **kwargs) def _subprocess_output(self, cmd, env=None, **kwargs): - log.debug("Call '{}'".format(" ".join(cmd))) + log.debug("Call '%s'", " ".join(cmd)) out = subprocess.check_output(cmd, env=env) return out.strip().decode("utf-8") @@ -168,7 +168,7 @@ class BuildSSL: if not self.has_src: self._download_openssl() else: - log.debug("Already has src {}".format(self.src_file)) + log.debug("Already has src %s", self.src_file) self._unpack_openssl() self._build_openssl() self._install_openssl() diff --git a/setup.py b/setup.py index 006ecdddb49..8c13cf29a08 100644 --- a/setup.py +++ b/setup.py @@ -186,7 +186,7 @@ def find_module_file(module, dirlist): if not list: return module if len(list) > 1: - log.info("WARNING: multiple copies of %s found"%module) + log.info("WARNING: multiple copies of %s found", module) return os.path.join(list[0], module) class PyBuildExt(build_ext): @@ -2213,7 +2213,7 @@ class PyBuildScripts(build_scripts): newfilename = filename + fullversion else: newfilename = filename + minoronly - log.info('renaming {} to {}'.format(filename, newfilename)) + log.info('renaming %s to %s', filename, newfilename) os.rename(filename, newfilename) newoutfiles.append(newfilename) if filename in updated_files: