diff --git a/docs/news.rst b/docs/news.rst index 64fd69fab..f4217713b 100644 --- a/docs/news.rst +++ b/docs/news.rst @@ -43,6 +43,7 @@ Scrapy changes: - DBM is now the default storage backend for HTTP cache middleware - number of log messages (per level) are now tracked through Scrapy stats (stat name: ``log_count/LEVEL``) - number received responses are now tracked through Scrapy stats (stat name: ``response_received_count``) +- removed ``scrapy.log.started`` attribute Scrapyd changes: diff --git a/docs/topics/logging.rst b/docs/topics/logging.rst index 2b99ef4d4..63537e494 100644 --- a/docs/topics/logging.rst +++ b/docs/topics/logging.rst @@ -53,10 +53,6 @@ scrapy.log module .. module:: scrapy.log :synopsis: Logging facility -.. attribute:: started - - A boolean which is ``True`` if logging has been started or ``False`` otherwise. - .. function:: start(logfile=None, loglevel=None, logstdout=None) Start the logging facility. This must be called before actually logging any diff --git a/scrapy/command.py b/scrapy/command.py index 629d9bd69..872e59a5a 100644 --- a/scrapy/command.py +++ b/scrapy/command.py @@ -20,6 +20,7 @@ class ScrapyCommand(object): def __init__(self): self.settings = None # set in scrapy.cmdline + self.configured = False def set_crawler(self, crawler): assert not hasattr(self, '_crawler'), "crawler already set" @@ -27,9 +28,10 @@ class ScrapyCommand(object): @property def crawler(self): - if not log.started: + if not self.configured: log.start_from_crawler(self._crawler) - self._crawler.configure() + self._crawler.configure() + self.configured = True return self._crawler def syntax(self): diff --git a/scrapy/log.py b/scrapy/log.py index 53cb56965..be2c1fd90 100644 --- a/scrapy/log.py +++ b/scrapy/log.py @@ -29,8 +29,6 @@ level_names = { SILENT: "SILENT", } -started = False - class ScrapyFileLogObserver(log.FileLogObserver): def __init__(self, f, level=INFO, encoding='utf-8', crawler=None): @@ -113,15 +111,14 @@ def _get_log_level(level_name_or_id): raise ValueError("Unknown log level: %r" % level_name_or_id) def start(logfile=None, loglevel='INFO', logstdout=True, logencoding='utf-8', crawler=None): - if log.defaultObserver: # check twisted log not already started - loglevel = _get_log_level(loglevel) - file = open(logfile, 'a') if logfile else sys.stderr - sflo = ScrapyFileLogObserver(file, loglevel, logencoding, crawler) - _oldshowwarning = warnings.showwarning - log.startLoggingWithObserver(sflo.emit, setStdout=logstdout) - # restore warnings, wrongly silenced by Twisted - warnings.showwarning = _oldshowwarning - return sflo + loglevel = _get_log_level(loglevel) + file = open(logfile, 'a') if logfile else sys.stderr + sflo = ScrapyFileLogObserver(file, loglevel, logencoding, crawler) + _oldshowwarning = warnings.showwarning + log.startLoggingWithObserver(sflo.emit, setStdout=logstdout) + # restore warnings, wrongly silenced by Twisted + warnings.showwarning = _oldshowwarning + return sflo def msg(message=None, _level=INFO, **kw): kw['logLevel'] = kw.pop('level', _level) @@ -137,11 +134,9 @@ def err(_stuff=None, _why=None, **kw): log.err(_stuff, _why, **kw) def start_from_crawler(crawler): - global started settings = crawler.settings - if started or not settings.getbool('LOG_ENABLED'): + if not settings.getbool('LOG_ENABLED'): return - started = True start(settings['LOG_FILE'], settings['LOG_LEVEL'], settings['LOG_STDOUT'], settings['LOG_ENCODING'], crawler)