Scrapy 日志处理程序

3

以下是需要翻译的内容:

我希望你能帮助我解决以下两个问题 - 如何设置类似Python中不同日志级别的处理程序。目前,我的代码如下:

STATS_ENABLED = True
STATS_DUMP = True 

LOG_FILE = 'crawl.log'

Scrapy生成的调试信息也会添加到日志文件中。这些信息很长,理想情况下,我希望DEBUG级别的信息保留在标准错误输出中,INFO级别的信息转储到我的LOG_FILE中。

其次,在文档中说:logging服务必须通过scrapy.log.start()函数显式启动。我的问题是,我在哪里运行这个scrapy.log.start()?是在我的爬虫中吗?

4个回答

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/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)并在那里使用它。


谢谢您回答我的第二个问题。但是您知道第一个问题的答案吗? - goh
@iws,这就是当你一次问了几个问题时会发生的事情。我无法给你第一个问题的详细答案,但我会尝试 - 请查看更新。 - warvariuc

3
我希望DEBUG级别的消息保留在标准错误输出中,INFO级别的消息则要被转储到我的LOG_FILE中。 您可以在settings.py中设置LOG_LEVEL = 'INFO',但这将完全禁用DEBUG消息。

2

嗯,

我想更新一下,我可以通过以下方式将日志文件处理程序记录到文件中:

from twisted.python import log
import logging
logging.basicConfig(level=logging.INFO, filemode='w', filename='log.txt'""")
observer = log.PythonLoggingObserver()
observer.start()

然而我无法像从标准错误中的twisted一样显示蜘蛛名字的日志。 我发布了这个问题


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

输出将被重定向到日志文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接