diff --git a/scrapy/log.py b/scrapy/log.py index ecb7ef7d4..37018f07a 100644 --- a/scrapy/log.py +++ b/scrapy/log.py @@ -34,15 +34,24 @@ log_level = DEBUG started = False +def _get_log_level(level_name_or_id=None): + if level_name_or_id is None: + lvlname = settings['LOG_LEVEL'] or settings['LOGLEVEL'] + return globals()[lvlname] + elif isinstance(level_name_or_id, int) and 0 <= level_name_or_id <= 5: + return level_name_or_id + elif isinstance(level_name_or_id, basestring): + return globals()[level_name_or_id] + else: + raise ValueError("Unknown log level: %r" % level_name_or_id) + def start(logfile=None, loglevel=None, logstdout=None): """Initialize and start logging facility""" global log_level, started - # set loglevel - loglevel = loglevel or settings['LOG_LEVEL'] or settings['LOGLEVEL'] - log_level = globals()[loglevel] if loglevel else DEBUG if started or not settings.getbool('LOG_ENABLED'): return + log_level = _get_log_level(loglevel) started = True # set log observer diff --git a/scrapy/tests/test_log.py b/scrapy/tests/test_log.py new file mode 100644 index 000000000..ec9c1a2db --- /dev/null +++ b/scrapy/tests/test_log.py @@ -0,0 +1,17 @@ +import unittest + +from scrapy import log +from scrapy.conf import settings + +class ItemTest(unittest.TestCase): + + def test_get_log_level(self): + default_log_level = getattr(log, settings['LOG_LEVEL']) + self.assertEqual(log._get_log_level(), default_log_level) + self.assertEqual(log._get_log_level('WARNING'), log.WARNING) + self.assertEqual(log._get_log_level(log.WARNING), log.WARNING) + self.assertRaises(ValueError, log._get_log_level, 99999) + self.assertRaises(ValueError, log._get_log_level, object()) + +if __name__ == "__main__": + unittest.main()