我的scrapy项目有多个不同的spider,我想针对不同的spider输出不同的日志文件,所以我在每个spider中重写了custor_settings
,就像这样
settings = get_project_settings()
today = time.strftime("%Y-%m-%d", time.localtime())
custom_settings = {
'LOG_ENABLED': True,
'LOG_FILE': settings.get("LOG_ABS_PATH") + '/logs/Index_' + today + '.log',
'LOG_FORMAT': settings.get("LOG_FORMAT"),
'LOG_LEVEL': logging.INFO,
'LOG_STDOUT': True
}
通过这种方式,我的确能输出日志到不同文件,但是我发现我的 scrapyd 中产生的日志不再能输出所有信息,而是仅仅输出如下一部分信息
2020-04-24 21:02:21 - /home/work/anaconda3/lib/python3.6/site-packages/scrapy/utils/log.py[line:146] - INFO: Scrapy 1.5.0 started (bot: MediaIndex)
2020-04-24 21:02:21 - /home/work/anaconda3/lib/python3.6/site-packages/scrapy/utils/log.py[line:149] - INFO: Versions: lxml 3.7.2.0, libxml2 2.9.3, cssselect 1.0.3, parsel 1.5.1, w3lib 1.20.0, Twisted 17.9.0, Python 3.6.3 |Anaconda custom (64-bit)| (default, Nov 9 2017, 00:19:18) - [GCC 7.2.0], pyOpenSSL 17.2.0 (OpenSSL 1.0.2p 14 Aug 2018), cryptography 2.0.3, Platform Linux-3.18.6-2.el7.centos.x86_64-x86_64-with-centos-7.3.1611-Core
2020-04-24 21:02:21 - /home/work/anaconda3/lib/python3.6/site-packages/scrapy/crawler.py[line:38] - INFO: Overridden settings: {'BOT_NAME': 'MediaIndex', 'CONCURRENT_REQUESTS': 32, 'DOWNLOAD_DELAY': 2, 'LOG_FILE': '/home/work/fuzheng/09.Media_Index/MediaIndex/MediaIndex/logs/TT_Index_2020-04-24.log', 'LOG_FORMAT': '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s', 'LOG_LEVEL': 20, 'LOG_STDOUT': True, 'NEWSPIDER_MODULE': 'MediaIndex.spiders', 'SPIDER_MODULES': ['MediaIndex.spiders']}
但是,实际上这里应该输出很多信息才对。我应该如何做才能让scrapyd中的日志这里也输出所有信息呢?
感谢!!!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Scrapy项目中,针对不同spider输出不同的日志文件是一个常见的需求。你已经通过在每个spider的custom_settings
里重写日志设置来实现这一功能,这是正确的做法。然而,关于Scrapyd中的日志输出不全的问题,这可能与Scrapyd本身的日志配置或运行时环境有关。
以下是一些建议,帮助你诊断和解决这个问题:
检查Scrapyd的日志配置:确保Scrapyd服务自身的日志配置没有限制输出信息的级别。Scrapyd通常有自己的日志配置文件(如位于/etc/scrapyd/log.cfg
),请检查该配置是否设置了过高的日志级别(比如只记录ERROR及以上级别的日志)。
Scrapy项目的全局日志设置:尽管你在各个spider中自定义了日志设置,但也要确认项目的全局settings.py
文件中LOG_LEVEL
等日志相关设置是否正确且不会覆盖spider内的自定义设置。Scrapy会先加载全局设置,然后是spider内的自定义设置,如果全局设置中日志级别被设置得过高,可能会导致部分日志不被输出。
查看Scrapy运行时参数:如果你是通过Scrapyd部署并启动爬虫任务的,注意检查是否有通过Scrapyd API调用时传递了影响日志行为的参数,这些参数可能无意间修改了日志配置。
日志后处理问题:有时候,问题可能出在日志收集或处理工具上,而不是Scrapy或Scrapyd本身。如果你使用了如logrotate、rsyslog或其他日志管理系统,请检查它们的配置,确保它们没有对日志进行截断或过滤。
增加日志调试信息:为了进一步诊断问题,可以在Scrapy项目的settings.py
或者spider的custom_settings
中临时增加更详细的日志输出,比如将LOG_LEVEL
设置为logging.DEBUG
,以查看是否能获取到更多日志信息。
查看Scrapy源码逻辑:如果以上方法都无法解决问题,可以深入阅读Scrapy和Scrapyd的相关源代码,特别是日志初始化和处理的部分,了解其内部工作原理,看是否存在特定条件下的逻辑分支影响了日志输出。
综上所述,从配置检查到系统层面的排查,逐步定位问题所在,应该能够找到解决方案。希望这些建议对你有所帮助!