首页 > 解决方案 > 将scrapy内置记录器设置在与用户代码记录器不同的级别

问题描述

Scrapy 内置记录器:

非常冗长。

我试图设置与用户蜘蛛日志级别 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)

这种方法在一段时间内有效,而另一些则无效。

什么是正确的解决方案?

标签: pythonloggingscrapy

解决方案


您可以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


推荐阅读