从scrapy.middleware和scrapy.crawler中删除INFO日志

yruzcnhs  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(139)

有没有人知道是否有一种方法可以为scrapy的模块设置不同的级别?我想在一个日志文件中记录刮取的项目和发送的请求,但是来自 scrapy.middlewarescrapy.crawlerscrapy.utils.log 模块的日志总是相同的,并且不会增加日志文件的值。
我最大的限制是我必须做spider之外的所有事情(在管道中,settings.py文件等)。我有200多个spider,不可能为每个spider添加代码。
Scrapy的文档说可以在高级定制部分修改特定日志的级别,但在www.example.com文件中设置时似乎不起作用settings.py。我猜来自scrapy.middleware和scrapy.crawler的日志是在蜘蛛评估www.example.com文件 * 之前 * 记录settings.py的。
我已经广泛阅读了Scrapy的文档,但是我似乎找不到答案。我不想重新创建我自己的日志,因为Scrapy的一些日志是有用的,比如记录发送的请求和错误的日志。
如果需要的话我可以提供代码摘录。谢谢。

ehxuflar

ehxuflar1#

你可以创建一个scrapy扩展来控制不同的日志级别,对于那些你不想出现的日志,将它们设置为更高的值。来自scrapy.utils.log的前3个日志在scrapy加载它的扩展之前运行,所以这3个日志我不知道除了完全关闭日志并自己实现日志之外还能做什么。
下面是扩展的一个示例:
extension.py

import logging
from scrapy.exceptions import NotConfigured
from scrapy import signals
logger = logging.getLogger(__name__)

class CustomLogExtension:

    def __init__(self):
        self.level = logging.WARNING
        self.modules = ['scrapy.utils.log', 'scrapy.middleware',
                        'scrapy.extensions.logstats', 'scrapy.statscollectors', 
                        'scrapy.core.engine', 'scrapy.core.scraper', 
                        'scrapy.crawler', 'scrapy.extensions', 
                        __name__]
        for module in self.modules:
            logger = logging.getLogger(module)
            logger.setLevel(self.level)

    @classmethod
    def from_crawler(cls, crawler):
        if not crawler.settings.getbool('CUSTOM_LOG_EXTENSION'):
            raise NotConfigured
        ext = cls()
        crawler.signals.connect(
            ext.spider_opened, signal=signals.spider_opened
        )
        return ext

    def spider_opened(self, spider):
        logger.debug("This log should not appear.")

然后在您的settings.py
settings.py

CUSTOM_LOG_EXTENSION = True
EXTENSIONS = {
   'scrapy.extensions.telnet.TelnetConsole': None,
   'my_project_name.extension.CustomLogExtension': 1,
}

上面的例子删除了几乎所有由scrapy生成的日志。如果你只想保留请求日志,那么只需从Extension构造函数的self.modules列表中删除scrapy.core.engine

相关问题