Scrapy日志处理器
我有两个问题想请教你们 - 我该如何设置不同的日志级别处理器,就像在Python中那样。目前,我有
STATS_ENABLED = True
STATS_DUMP = True
LOG_FILE = 'crawl.log'
但是,Scrapy生成的调试信息也会被记录到日志文件里。这些信息很长,我希望DEBUG级别的消息只显示在标准错误输出中,而INFO级别的消息则记录到我的LOG_FILE
里。
其次,在文档中提到日志服务必须通过scrapy.log.start()函数显式启动。
我的问题是,我应该在哪里运行这个scrapy.log.start()
呢?是在我的爬虫里面吗?
4 个回答
我希望DEBUG级别的信息保留在标准错误输出中,而INFO级别的信息则记录到我的LOG_FILE里。
你可以在settings.py文件中设置 LOG_LEVEL = 'INFO'
,但这样做会完全关闭DEBUG信息的输出。
其次,在文档中提到
日志服务必须通过 scrapy.log.start() 函数显式启动
。我的问题是,我应该在哪里运行这个 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),并在这里使用它。
嗯,
我想更新一下,我已经能通过使用
from twisted.python import log
import logging
logging.basicConfig(level=logging.INFO, filemode='w', filename='log.txt'""")
observer = log.PythonLoggingObserver()
observer.start()
来让日志文件处理器正常工作了。不过,我还不能让日志在标准错误中显示爬虫的名字,就像在twisted中那样。我在这里发了个问题。