This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author iritkatriel
Recipients ankostis, iritkatriel, penlect, vinay.sajip
Date 2020-08-07.11:57:15
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1596801436.22.0.604457803411.issue41483@roundup.psfhosted.org>
In-reply-to
Content
Actually the lock is needed and it is currently missing from setTarget. 

The script below causes handle to be called on None, causing:

  File "C:\Users\User\src\cpython\lib\logging\handlers.py", line 1265, in emit
    self.flush()
  File "C:\Users\User\src\cpython\lib\logging\handlers.py", line 1348, in flush
    self.target.handle(record)
AttributeError: 'NoneType' object has no attribute 'handle'


------------------------------------------------
import io
import logging.handlers
import threading
import time

class SlowHandler:
    def __init__(self):
        self.stream = io.StringIO()
        self.streamHandler = logging.StreamHandler(self.stream)

    def handle(self, msg):
        time.sleep(1)
        self.streamHandler.handle(msg)

target = SlowHandler()
mem_hdlr = logging.handlers.MemoryHandler(10, logging.ERROR, target)
mem_logger = logging.getLogger('mem')
mem_logger.propagate = False
mem_logger.addHandler(mem_hdlr)

def toggleTarget():
    time.sleep(1)
    mem_hdlr.setTarget(None)

t = threading.Thread(target=toggleTarget, args=())
t.daemon = True
t.start()

while True:
    time.sleep(0.1)
    mem_logger.warning("warning not flushed")
    mem_logger.error("error is flushed")
    print("%s" % target.stream.getvalue().splitlines())

------------------------------------------------
History
Date User Action Args
2020-08-07 11:57:16iritkatrielsetrecipients: + iritkatriel, vinay.sajip, ankostis, penlect
2020-08-07 11:57:16iritkatrielsetmessageid: <1596801436.22.0.604457803411.issue41483@roundup.psfhosted.org>
2020-08-07 11:57:16iritkatriellinkissue41483 messages
2020-08-07 11:57:15iritkatrielcreate