Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc148a68

Browse files
[3.13]gh-91555: Revert disabling of logger while handling log record. (GH-135858) (GH-135911)
Co-authored-by: Vinay Sajip <vinay_sajip@yahoo.co.uk>
1 parent335d7da commitc148a68

File tree

4 files changed

+13
-104
lines changed

4 files changed

+13
-104
lines changed

‎Lib/logging/__init__.py

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1475,8 +1475,6 @@ class Logger(Filterer):
14751475
level, and "input.csv", "input.xls" and "input.gnu" for the sub-levels.
14761476
There is no arbitrary limit to the depth of nesting.
14771477
"""
1478-
_tls=threading.local()
1479-
14801478
def__init__(self,name,level=NOTSET):
14811479
"""
14821480
Initialize the logger with a name and an optional level.
@@ -1673,19 +1671,14 @@ def handle(self, record):
16731671
This method is used for unpickled records received from a socket, as
16741672
well as those created locally. Logger-level filtering is applied.
16751673
"""
1676-
ifself._is_disabled():
1674+
ifself.disabled:
16771675
return
1678-
1679-
self._tls.in_progress=True
1680-
try:
1681-
maybe_record=self.filter(record)
1682-
ifnotmaybe_record:
1683-
return
1684-
ifisinstance(maybe_record,LogRecord):
1685-
record=maybe_record
1686-
self.callHandlers(record)
1687-
finally:
1688-
self._tls.in_progress=False
1676+
maybe_record=self.filter(record)
1677+
ifnotmaybe_record:
1678+
return
1679+
ifisinstance(maybe_record,LogRecord):
1680+
record=maybe_record
1681+
self.callHandlers(record)
16891682

16901683
defaddHandler(self,hdlr):
16911684
"""
@@ -1773,7 +1766,7 @@ def isEnabledFor(self, level):
17731766
"""
17741767
Is this logger enabled for level 'level'?
17751768
"""
1776-
ifself._is_disabled():
1769+
ifself.disabled:
17771770
returnFalse
17781771

17791772
try:
@@ -1823,11 +1816,6 @@ def _hierlevel(logger):
18231816
ifisinstance(item,Logger)anditem.parentisselfand
18241817
_hierlevel(item)==1+_hierlevel(item.parent))
18251818

1826-
def_is_disabled(self):
1827-
# We need to use getattr as it will only be set the first time a log
1828-
# message is recorded on any given thread
1829-
returnself.disabledorgetattr(self._tls,'in_progress',False)
1830-
18311819
def__repr__(self):
18321820
level=getLevelName(self.getEffectiveLevel())
18331821
return'<%s %s (%s)>'% (self.__class__.__name__,self.name,level)

‎Lib/test/test_logging.py

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -4163,89 +4163,6 @@ def __init__(self, *args, **kwargs):
41634163
handler=logging.getHandlerByName('custom')
41644164
self.assertEqual(handler.custom_kwargs,custom_kwargs)
41654165

4166-
# See gh-91555 and gh-90321
4167-
@support.requires_subprocess()
4168-
deftest_deadlock_in_queue(self):
4169-
queue=multiprocessing.Queue()
4170-
handler=logging.handlers.QueueHandler(queue)
4171-
logger=multiprocessing.get_logger()
4172-
level=logger.level
4173-
try:
4174-
logger.setLevel(logging.DEBUG)
4175-
logger.addHandler(handler)
4176-
logger.debug("deadlock")
4177-
finally:
4178-
logger.setLevel(level)
4179-
logger.removeHandler(handler)
4180-
4181-
deftest_recursion_in_custom_handler(self):
4182-
classBadHandler(logging.Handler):
4183-
def__init__(self):
4184-
super().__init__()
4185-
defemit(self,record):
4186-
logger.debug("recurse")
4187-
logger=logging.getLogger("test_recursion_in_custom_handler")
4188-
logger.addHandler(BadHandler())
4189-
logger.setLevel(logging.DEBUG)
4190-
logger.debug("boom")
4191-
4192-
@threading_helper.requires_working_threading()
4193-
deftest_thread_supression_noninterference(self):
4194-
lock=threading.Lock()
4195-
logger=logging.getLogger("test_thread_supression_noninterference")
4196-
4197-
# Block on the first call, allow others through
4198-
#
4199-
# NOTE: We need to bypass the base class's lock, otherwise that will
4200-
# block multiple calls to the same handler itself.
4201-
classBlockOnceHandler(TestHandler):
4202-
def__init__(self,barrier):
4203-
super().__init__(support.Matcher())
4204-
self.barrier=barrier
4205-
4206-
defcreateLock(self):
4207-
self.lock=None
4208-
4209-
defhandle(self,record):
4210-
self.emit(record)
4211-
4212-
defemit(self,record):
4213-
ifself.barrier:
4214-
barrier=self.barrier
4215-
self.barrier=None
4216-
barrier.wait()
4217-
withlock:
4218-
pass
4219-
super().emit(record)
4220-
logger.info("blow up if not supressed")
4221-
4222-
barrier=threading.Barrier(2)
4223-
handler=BlockOnceHandler(barrier)
4224-
logger.addHandler(handler)
4225-
logger.setLevel(logging.DEBUG)
4226-
4227-
t1=threading.Thread(target=logger.debug,args=("1",))
4228-
withlock:
4229-
4230-
# Ensure first thread is blocked in the handler, hence supressing logging...
4231-
t1.start()
4232-
barrier.wait()
4233-
4234-
# ...but the second thread should still be able to log...
4235-
t2=threading.Thread(target=logger.debug,args=("2",))
4236-
t2.start()
4237-
t2.join(timeout=3)
4238-
4239-
self.assertEqual(len(handler.buffer),1)
4240-
self.assertTrue(handler.matches(levelno=logging.DEBUG,message='2'))
4241-
4242-
# The first thread should still be blocked here
4243-
self.assertTrue(t1.is_alive())
4244-
4245-
# Now the lock has been released the first thread should complete
4246-
t1.join()
4247-
self.assertEqual(len(handler.buffer),2)
4248-
self.assertTrue(handler.matches(levelno=logging.DEBUG,message='1'))
42494166

42504167
classManagerTest(BaseTest):
42514168
deftest_manager_loggerclass(self):

‎Misc/NEWS.d/3.13.4.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ methods when getting the class signature for a class with
493493
.. section: Library
494494
495495
Ignore log messages generated during handling of log messages, to avoid
496-
deadlock or infinite recursion.
496+
deadlock or infinite recursion. [NOTE: This change has since been reverted.]
497497

498498
..
499499
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
An earlier change, which was introduced in 3.13.4, has been reverted. It
2+
disabled logging for a logger during handling of log messages for that
3+
logger. Since the reversion, the behaviour should be as it was before
4+
3.13.4.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp