scrapy日志处理程序

时间:2011-11-30 03:21:26

标签: python screen-scraping scrapy

我在以下两个问题中寻求帮助 - 如何为python中的不同日志级别设置处理程序。目前,我有

STATS_ENABLED = True
STATS_DUMP = True 

LOG_FILE = 'crawl.log'

但是Scrapy生成的调试消息也会添加到日志文件中。那些非常长,理想情况下,我希望将DEBUG级别的消息留在标准错误上,并将INFO消息转储到我的LOG_FILE

其次,在文档中,它说The logging service must be explicitly started through the scrapy.log.start() function.我的问题是,我在哪里运行此scrapy.log.start()?它在我的蜘蛛里面吗?

4 个答案:

答案 0 :(得分:4)

  

其次,在文档中,它说The logging service must be explicitly started through the scrapy.log.start() function。我的问题是,在哪里   运行此scrapy.log.start()?它在我的蜘蛛里面吗?

如果您使用scrapy crawl my_spider运行蜘蛛 - 如果STATS_ENABLED = True

,则会自动启动日志

如果您手动启动抓取工具流程,则可以在启动抓取工具流程之前执行scrapy.log.start()

from scrapy.crawler import CrawlerProcess
from scrapy.conf import settings


settings.overrides.update({}) # your settings

crawlerProcess = CrawlerProcess(settings)
crawlerProcess.install()
crawlerProcess.configure()

crawlerProcess.crawl(spider) # your spider here

log.start() # depends on LOG_ENABLED

print "Starting crawler."
crawlerProcess.start()
print "Crawler stopped."

我对你的第一个问题的了解很少:

因为您必须手动启动scrapy日志,所以这允许您使用自己的记录器。

我认为你可以在scrapy源代码中复制模块scrapy/scrapy/log.py,修改它,导入它而不是scrapy.log并运行start() - scrapy将使用你的日志。其中有一行start()表示log.startLoggingWithObserver(sflo.emit, setStdout=logstdout)

制作自己的观察者(http://docs.python.org/howto/logging-cookbook.html#logging-to-multiple-destinations)并在那里使用。

答案 1 :(得分:3)

  

我希望将标准错误和INFO消息留下的DEBUG级别消息转储到我的LOG_FILE。

您可以在settings.py中设置LOG_LEVEL = 'INFO',但它会完全禁用DEBUG消息。

答案 2 :(得分:3)

嗯,

只是想更新我能够通过使用

获取日志文件处理程序
from twisted.python import log
import logging
logging.basicConfig(level=logging.INFO, filemode='w', filename='log.txt'""")
observer = log.PythonLoggingObserver()
observer.start()

然而,我无法让日志显示蜘蛛的名称,就像标准错误中的扭曲一样。我发布了这个question

答案 3 :(得分:0)

scrapy some-scrapy's-args -L 'INFO' -s LOG_FILE=log1.log

输出将被重定向到logname文件。