无法禁用Scrapy脚本中的日志记录消息

时间:2018-07-11 12:01:39

标签: python scrapy

我正在使用scrapy(1.5.0),显然使用了Pillow(5.2.0)。当我使用scrapy runspider my_scrapy_script.py运行脚本时,stdout充满了无用的日志消息,例如:

2018-07-11 14:41:07 [scrapy.utils.log] INFO: Scrapy 1.5.0 started (bot: scrapybot)
2018-07-11 14:41:07 [PIL.Image] DEBUG: Importing BlpImagePlugin
2018-07-11 14:41:07 [PIL.Image] DEBUG: Importing BmpImagePlugin
2018-07-11 14:41:07 [PIL.Image] DEBUG: Importing BufrStubImagePlugin
2018-07-11 14:41:07 [PIL.Image] DEBUG: Importing CurImagePlugin
... many more of the like ...

我尝试通过这样设置记录器级别来禁用它们:

logger = logging.getLogger('PIL.Image').setLevel(logging.WARNING)

等等,它没有帮助,我试图像这样设置根记录器级别:

logger = logging.getLogger().setLevel(logging.WARNING)

也无效,较高的级别也无济于事

在刮擦设置中设置LOG_LEVEL = logging.WARNING甚至LOG_ENABLED = False也不起作用。

如果我将LOG_LEVEL设置为'INFO',则会打印

2018-07-11 07:04:42 [scrapy.crawler] INFO: Overridden settings: {'LOG_ENABLED': False, 'LOG_LEVEL': 'INFO', 'SPIDER_LOADER_WARN_ONLY': True}

所以看起来上面提到的洪水是在脚本加载之前产生的

4 个答案:

答案 0 :(得分:1)

根据文档,以附加参数开头:

https://doc.scrapy.org/en/latest/topics/logging.html

--loglevel/-L LEVEL

所以可能是

scrapy runspider my_scrapy_script.py --loglevel WARNING

答案 1 :(得分:1)

正如@Lodi在问题评论中所建议的那样,我只能解决使用celery在Django项目中用生产中的调试消息(包括抓取的页面的所有HTML)填充Scrapy日志的问题,禁用抓取记录器的传播。所以,我所做的是:

settings.py:

import logging
if not DEBUG:
    logging.getLogger('scrapy').propagate = False

此外,我使我的Spider使用的是从“ scrapy”记录器派生的记录器,因为CrawlSpider.logger不是“ scrapy”记录器的后代。因此,在这种情况下,我使用了scrapy.spiders记录器来记录来自CrawlSpider的Spider消息:

logger = logging.getLogger('scrapy.spiders')

然后将其与logger.debug()logger.info()等一起使用。

请记住,记录的严重性高于debuginfo的消息,即:warningerrorcritical和{{1 }}将被传播,而exception记录器将禁用传播。因此,您仍然会看到记录了scrapy个异常。

答案 2 :(得分:0)

您可以使用LOG_ENABLED=False将其完全禁用。您还可以在抓取调用期间传递设置-scrapy runspider my_scrapy_script.py -s LOG_ENABLED=False

Scrapy log documentation

答案 3 :(得分:0)

另一种方式

from scrapy.utils.log import configure_logging

configure_logging(install_root_handler=True)
logging.disable(50)  # CRITICAL = 50

对于日志记录级别= Python Logging Levels

更多信息=> Scrapy Logging

蜘蛛的另一种方式:

  custom_settings = {
    'LOG_ENABLED': False,
  # ... other settings...
  }