Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t禁用scrapy脚本中的日志消息_Python_Scrapy - Fatal编程技术网

Python Can';t禁用scrapy脚本中的日志消息

Python Can';t禁用scrapy脚本中的日志消息,python,scrapy,Python,Scrapy,我使用的是scrapy(1.5.0),它显然使用枕头(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 2

我使用的是scrapy(1.5.0),它显然使用枕头(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)
等等,它没有帮助,我尝试如下设置根记录器级别:

logger = logging.getLogger('PIL.Image').setLevel(logging.WARNING)
logger = logging.getLogger().setLevel(logging.WARNING)
同样没有效果,更高的水平也没有帮助

在scrapy设置中设置
LOG\u LEVEL=logging.WARNING
甚至
LOG\u ENABLED=False
也没有效果

如果我将
LOG\u LEVEL
设置为
'INFO'
它将打印

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

因此,上面提到的洪水似乎是在加载脚本之前产生的

您可以使用
LOG\u ENABLED=False
完全禁用它。您还可以在scrapy调用期间传递设置-
scrapy runspider my\u scrapy\u script.py-s LOG\u ENABLED=False


您可以使用
LOG\u ENABLED=False将其完全禁用。您还可以在scrapy调用期间传递设置-
scrapy runspider my\u scrapy\u script.py-s LOG\u ENABLED=False


根据文档,从附加参数开始:

所以可能是这样

scrapy runspider my_scrapy_script.py --loglevel WARNING

根据文档,从附加参数开始:

所以可能是这样

scrapy runspider my_scrapy_script.py --loglevel WARNING
另一种方式

from scrapy.utils.log import configure_logging

configure_logging(install_root_handler=True)
logging.disable(50)  # CRITICAL = 50
对于日志记录级别=

更多信息=>

spider中的另一种方式:

  custom_settings = {
    'LOG_ENABLED': False,
  # ... other settings...
  }
另一种方式

from scrapy.utils.log import configure_logging

configure_logging(install_root_handler=True)
logging.disable(50)  # CRITICAL = 50
对于日志记录级别=

更多信息=>

spider中的另一种方式:

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

正如@Lodi在一个问题的评论中所建议的,我只能解决在Django项目中使用芹菜在生产时用调试消息(包括所有被刮页面的HTML)填充日志的问题,禁用Scrapy logger的传播。所以,我所做的是:

settings.py:

import logging
if not DEBUG:
    logging.getLogger('scrapy').propagate = False
另外,我让我的爬行器使用一个从“scrapy”记录器派生的记录器,因为
CrawlSpider.logger
不是“scrapy”记录器的后代。因此,在本例中,我使用
scrapy.Spider
记录器记录从
CrawlSpider
继承的Spider的消息:

logger = logging.getLogger('scrapy.spiders')
然后将其与
logger.debug()
logger.info()
等一起使用


请记住,记录的严重性高于
debug
info
的消息将被传播,即:
警告
错误
严重
异常
,尽管在
scrapy
记录器上禁用传播。因此,您仍然会看到记录的
DropItem
异常。

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

settings.py:

import logging
if not DEBUG:
    logging.getLogger('scrapy').propagate = False
另外,我让我的爬行器使用一个从“scrapy”记录器派生的记录器,因为
CrawlSpider.logger
不是“scrapy”记录器的后代。因此,在本例中,我使用
scrapy.Spider
记录器记录从
CrawlSpider
继承的Spider的消息:

logger = logging.getLogger('scrapy.spiders')
然后将其与
logger.debug()
logger.info()
等一起使用


请记住,记录的严重性高于
debug
info
的消息将被传播,即:
警告
错误
严重
异常
,尽管在
scrapy
记录器上禁用传播。因此,您仍然会看到记录的
DropItem
异常。

您是否尝试在scrapy's settings.py设置
LOG\u LEVEL='INFO'
?GermanoLodi,是的(没有帮助),似乎洪水是在加载设置之前生成的。请尝试更改
propagate
属性,设置
logging.getLogger('scrapy').propagate=False
您是否尝试在scrapy的设置中设置
LOG\u LEVEL='INFO'
py?@GermanoLodi,是的(没有帮助),似乎洪水是在设置加载之前生成的请尝试更改
propagate
属性,设置
logging.getLogger('scrapy').propagate=False