From cb65b3a4f484ce71dcb76a918af98c7015513025 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Fri, 2 Aug 2019 16:53:00 +0100 Subject: [PATCH] =?UTF-8?q?bpo-37742:=20Return=20the=20root=20logger=20whe?= =?UTF-8?q?n=20logging.getLogger('root')=20is=20c=E2=80=A6=20(#15077)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * bpo-37742: Return the root logger when logging.getLogger('root') is called. * Added type check guard on logger name in logging.getLogger() and refined a test. --- Lib/logging/__init__.py | 5 ++--- Lib/test/test_logging.py | 1 + .../next/Library/2019-08-02-14-01-25.bpo-37742.f4Xn9S.rst | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2019-08-02-14-01-25.bpo-37742.f4Xn9S.rst diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index 645e0b3c3a6..62a87a71b1a 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -2024,10 +2024,9 @@ def getLogger(name=None): If no name is specified, return the root logger. """ - if name: - return Logger.manager.getLogger(name) - else: + if not name or isinstance(name, str) and name == root.name: return root + return Logger.manager.getLogger(name) def critical(msg, *args, **kwargs): """ diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 6507d79742a..dca744c5909 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -4856,6 +4856,7 @@ class LoggerTest(BaseTest): self.assertIs(root, logging.root) self.assertIs(root, logging.getLogger(None)) self.assertIs(root, logging.getLogger('')) + self.assertIs(root, logging.getLogger('root')) self.assertIs(root, logging.getLogger('foo').root) self.assertIs(root, logging.getLogger('foo.bar').root) self.assertIs(root, logging.getLogger('foo').parent) diff --git a/Misc/NEWS.d/next/Library/2019-08-02-14-01-25.bpo-37742.f4Xn9S.rst b/Misc/NEWS.d/next/Library/2019-08-02-14-01-25.bpo-37742.f4Xn9S.rst new file mode 100644 index 00000000000..300ced3fec6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-08-02-14-01-25.bpo-37742.f4Xn9S.rst @@ -0,0 +1,5 @@ +The logging.getLogger() API now returns the root logger when passed the name +'root', whereas previously it returned a non-root logger named 'root'. This +could affect cases where user code explicitly wants a non-root logger named +'root', or instantiates a logger using logging.getLogger(__name__) in some +top-level module called 'root.py'.