mirror of https://github.com/scrapy/scrapy.git
LogCounterHandler is never removed from root handlers list, fix that
lambda is garbage collected and because receiver is added as weak reference by default - when signals.engine_stopped is fired logging.root.removeHandler is not executed. Fixed that by assigning lambda to a private argument and not by using connect(..., weak=False) because I belive this lambda function should be collected with crawler object
This commit is contained in:
parent
3545468389
commit
b2765aabd8
|
|
@ -35,8 +35,10 @@ class Crawler(object):
|
|||
|
||||
handler = LogCounterHandler(self, level=settings.get('LOG_LEVEL'))
|
||||
logging.root.addHandler(handler)
|
||||
self.signals.connect(lambda: logging.root.removeHandler(handler),
|
||||
signals.engine_stopped)
|
||||
# lambda is assigned to Crawler attribute because this way it is not
|
||||
# garbage collected after leaving __init__ scope
|
||||
self.__remove_handler = lambda: logging.root.removeHandler(handler)
|
||||
self.signals.connect(self.__remove_handler, signals.engine_stopped)
|
||||
|
||||
lf_cls = load_object(self.settings['LOG_FORMATTER'])
|
||||
self.logformatter = lf_cls.from_crawler(self)
|
||||
|
|
|
|||
Loading…
Reference in New Issue