Log overriden Scrapy settings when Scrapy starts.

This is useful for debugging, to quickly find out which settings where
used for a specific spider run. dict settings are omitted for brevity.
DEBUG level is used for consistency with "Enabled
extensions/middlewares" lines (which share a similar purpose).
This commit is contained in:
Pablo Hoffman 2013-02-28 11:35:11 -02:00
parent 8f3a509d44
commit d5d944fa44
2 changed files with 17 additions and 0 deletions

View File

@ -8,6 +8,7 @@ from scrapy.extension import ExtensionManager
from scrapy.signalmanager import SignalManager
from scrapy.utils.ossignal import install_shutdown_handlers, signal_names
from scrapy.utils.misc import load_object
from scrapy.settings import overridden_settings
from scrapy import log, signals
@ -33,6 +34,8 @@ class Crawler(object):
if self.configured:
return
self.configured = True
d = dict(overridden_settings(self.settings))
log.msg(format="Overridden settings: %(settings)r", settings=d, level=log.DEBUG)
lf_cls = load_object(self.settings['LOG_FORMATTER'])
self.logformatter = lf_cls.from_crawler(self)
self.extensions = ExtensionManager.from_crawler(self)

View File

@ -57,3 +57,17 @@ class CrawlerSettings(Settings):
def __str__(self):
return "<CrawlerSettings module=%r>" % self.settings_module
def iter_default_settings():
"""Return the default settings as an iterator of (name, value) tuples"""
for name in dir(default_settings):
if name.isupper():
yield name, getattr(default_settings, name)
def overridden_settings(settings):
"""Return a dict of the settings that have been overridden"""
for name, defvalue in iter_default_settings():
value = settings[name]
if not isinstance(defvalue, dict) and value != defvalue:
yield name, value