将scrapy内置记录器设置为与用户代码记录器不同的级别

时间:2018-04-25 18:52:27

标签: python logging scrapy

Scrapy内置记录器:

  • scrapy.utils.log
  • scrapy.crawler
  • scrapy.middleware
  • scrapy.core.engine
  • scrapy.extensions.logstats
  • scrapy.extensions.telnet
  • scrapy.core.scraper
  • scrapy.statscollectors

非常详细。

我试图设置一个与用户蜘蛛日志级别INFO不同的日志级别DEBUG。这样我就可以减少'噪音'。

这个辅助函数有时会起作用:

def set_loggers_level(level=logging.DEBUG):    
  loggers = [
     'scrapy.utils.log',
     'scrapy.crawler',
     'scrapy.middleware',
     'scrapy.core.engine',
     'scrapy.extensions.logstats',
     'scrapy.extensions.telnet',
     'scrapy.core.scraper',
     'scrapy.statscollectors'
 ]
 for logger_name in loggers:
    logger = logging.getLogger(logger_name)
    logger.setLevel(level)
    for handler in logger.handlers:
        handler.setLevel(level)

我从UserSpider init调用它:

class UserSpider(scrapy.Spider):

      def __init__(self, *args, **kwargs):
          # customize loggers: Some loggers can't be reset a this point
          helpers.set_loggers_level()
          super(UserSpider, self).__init__(*args, **kwargs)

这种方法有一段时间,有些则没有。

什么是正确的解决方案?

3 个答案:

答案 0 :(得分:0)

您只需在LOG_LEVEL中正确设置settings.py,请在此处阅读更多内容:https://doc.scrapy.org/en/latest/topics/settings.html#std:setting-LOG_LEVEL

  

<强> LOG_LEVEL
  默认值:'DEBUG'
  记录的最低级别。可用级别包括:CRITICAL,ERROR,WARNING,INFO,DEBUG。有关详细信息,请参阅记录。

如果项目范围设置不够集中,您可以使用custom_settings为每个蜘蛛设置它们:

class MySpider(scrapy.Spider):
    name = 'myspider'

    custom_settings = {
        'LOG_LEVEL': 'INFO',
    }

来源: https://doc.scrapy.org/en/latest/topics/settings.html#settings-per-spider

答案 1 :(得分:0)

为每个日志处理程序设置不同的日志级别是不太可行的。

在一天结束时,更好的方法是从另一个脚本启动scrapy cli工具,并使用解析器过滤日志输出。

答案 2 :(得分:0)

我偶然发现了同样的问题。我尝试了各种方法,但是由于Scrapy使用了日志记录模块,因此您必须将其设置为全局级别,这会导致Scrapy打印所有调试信息。

我发现了一种更可靠的解决方案,可以将bool标志与打印语句一起用于DEBUG,并将记录器用于INFO,ERROR和WARNING。