bpo-37258: Not a bug, but added a unit test and updated documentation. (GH-14229)
This commit is contained in:
parent
987a0dcfa1
commit
0150001653
|
@ -50,8 +50,8 @@ listed below.
|
|||
Logger Objects
|
||||
--------------
|
||||
|
||||
Loggers have the following attributes and methods. Note that Loggers are never
|
||||
instantiated directly, but always through the module-level function
|
||||
Loggers have the following attributes and methods. Note that Loggers should
|
||||
*NEVER* be instantiated directly, but always through the module-level function
|
||||
``logging.getLogger(name)``. Multiple calls to :func:`getLogger` with the same
|
||||
name will always return a reference to the same Logger object.
|
||||
|
||||
|
@ -1244,7 +1244,9 @@ functions.
|
|||
The class should define :meth:`__init__` such that only a name argument is
|
||||
required, and the :meth:`__init__` should call :meth:`Logger.__init__`. This
|
||||
function is typically called before any loggers are instantiated by applications
|
||||
which need to use custom logger behavior.
|
||||
which need to use custom logger behavior. After this call, as at any other
|
||||
time, do not instantiate loggers directly using the subclass: continue to use
|
||||
the :func:`logging.getLogger` API to get your loggers.
|
||||
|
||||
|
||||
.. function:: setLogRecordFactory(factory)
|
||||
|
|
|
@ -4172,6 +4172,37 @@ class ModuleLevelMiscTest(BaseTest):
|
|||
logging.setLoggerClass(logging.Logger)
|
||||
self.assertEqual(logging.getLoggerClass(), logging.Logger)
|
||||
|
||||
def test_subclass_logger_cache(self):
|
||||
# bpo-37258
|
||||
message = []
|
||||
|
||||
class MyLogger(logging.getLoggerClass()):
|
||||
def __init__(self, name='MyLogger', level=logging.NOTSET):
|
||||
super().__init__(name, level)
|
||||
message.append('initialized')
|
||||
|
||||
logging.setLoggerClass(MyLogger)
|
||||
logger = logging.getLogger('just_some_logger')
|
||||
self.assertEqual(message, ['initialized'])
|
||||
stream = io.StringIO()
|
||||
h = logging.StreamHandler(stream)
|
||||
logger.addHandler(h)
|
||||
try:
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.debug("hello")
|
||||
self.assertEqual(stream.getvalue().strip(), "hello")
|
||||
|
||||
stream.truncate(0)
|
||||
stream.seek(0)
|
||||
|
||||
logger.setLevel(logging.INFO)
|
||||
logger.debug("hello")
|
||||
self.assertEqual(stream.getvalue(), "")
|
||||
finally:
|
||||
logger.removeHandler(h)
|
||||
h.close()
|
||||
logging.setLoggerClass(logging.Logger)
|
||||
|
||||
@support.requires_type_collecting
|
||||
def test_logging_at_shutdown(self):
|
||||
# Issue #20037
|
||||
|
|
Loading…
Reference in New Issue