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

Commit18d32fb

Browse files
authored
pythongh-91555: Revert disabling of logger while handling log record. (pythonGH-135858)
Revert "pythongh-91555: disable logger while handling log record (pythonGH-131812)"This reverts commit2561e14.
1 parentee0e22c commit18d32fb

File tree

3 files changed

+8
-105
lines changed

3 files changed

+8
-105
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
@@ -4214,89 +4214,6 @@ def __init__(self, *args, **kwargs):
42144214
handler=logging.getHandlerByName('custom')
42154215
self.assertEqual(handler.custom_kwargs,custom_kwargs)
42164216

4217-
# See gh-91555 and gh-90321
4218-
@support.requires_subprocess()
4219-
deftest_deadlock_in_queue(self):
4220-
queue=multiprocessing.Queue()
4221-
handler=logging.handlers.QueueHandler(queue)
4222-
logger=multiprocessing.get_logger()
4223-
level=logger.level
4224-
try:
4225-
logger.setLevel(logging.DEBUG)
4226-
logger.addHandler(handler)
4227-
logger.debug("deadlock")
4228-
finally:
4229-
logger.setLevel(level)
4230-
logger.removeHandler(handler)
4231-
4232-
deftest_recursion_in_custom_handler(self):
4233-
classBadHandler(logging.Handler):
4234-
def__init__(self):
4235-
super().__init__()
4236-
defemit(self,record):
4237-
logger.debug("recurse")
4238-
logger=logging.getLogger("test_recursion_in_custom_handler")
4239-
logger.addHandler(BadHandler())
4240-
logger.setLevel(logging.DEBUG)
4241-
logger.debug("boom")
4242-
4243-
@threading_helper.requires_working_threading()
4244-
deftest_thread_supression_noninterference(self):
4245-
lock=threading.Lock()
4246-
logger=logging.getLogger("test_thread_supression_noninterference")
4247-
4248-
# Block on the first call, allow others through
4249-
#
4250-
# NOTE: We need to bypass the base class's lock, otherwise that will
4251-
# block multiple calls to the same handler itself.
4252-
classBlockOnceHandler(TestHandler):
4253-
def__init__(self,barrier):
4254-
super().__init__(support.Matcher())
4255-
self.barrier=barrier
4256-
4257-
defcreateLock(self):
4258-
self.lock=None
4259-
4260-
defhandle(self,record):
4261-
self.emit(record)
4262-
4263-
defemit(self,record):
4264-
ifself.barrier:
4265-
barrier=self.barrier
4266-
self.barrier=None
4267-
barrier.wait()
4268-
withlock:
4269-
pass
4270-
super().emit(record)
4271-
logger.info("blow up if not supressed")
4272-
4273-
barrier=threading.Barrier(2)
4274-
handler=BlockOnceHandler(barrier)
4275-
logger.addHandler(handler)
4276-
logger.setLevel(logging.DEBUG)
4277-
4278-
t1=threading.Thread(target=logger.debug,args=("1",))
4279-
withlock:
4280-
4281-
# Ensure first thread is blocked in the handler, hence supressing logging...
4282-
t1.start()
4283-
barrier.wait()
4284-
4285-
# ...but the second thread should still be able to log...
4286-
t2=threading.Thread(target=logger.debug,args=("2",))
4287-
t2.start()
4288-
t2.join(timeout=3)
4289-
4290-
self.assertEqual(len(handler.buffer),1)
4291-
self.assertTrue(handler.matches(levelno=logging.DEBUG,message='2'))
4292-
4293-
# The first thread should still be blocked here
4294-
self.assertTrue(t1.is_alive())
4295-
4296-
# Now the lock has been released the first thread should complete
4297-
t1.join()
4298-
self.assertEqual(len(handler.buffer),2)
4299-
self.assertTrue(handler.matches(levelno=logging.DEBUG,message='1'))
43004217

43014218
classManagerTest(BaseTest):
43024219
deftest_manager_loggerclass(self):

‎Misc/NEWS.d/next/Library/2025-03-30-16-42-38.gh-issue-91555.ShVtwW.rst

Lines changed: 0 additions & 2 deletions
This file was deleted.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp