我决定使用Python日志模块,因为Twisted on std error生成的消息太长了,我想将INFO
级别的有意义的消息(如StatsCollector
生成的消息)写入一个单独的日志文件,同时保留屏幕上的消息。
from twisted.python import log
import logging
logging.basicConfig(level=logging.INFO, filemode='w', filename='buyerlog.txt')
observer = log.PythonLoggingObserver()
observer.start()
这很好,我有我的消息,但缺点是我不知道消息是由哪个spider生成的!这是我的日志文件,%(name)s
显示“twisted”:
INFO:twisted:Log opened.
2 INFO:twisted:Scrapy 0.12.0.2543 started (bot: property)
3 INFO:twisted:scrapy.telnet.TelnetConsole starting on 6023
4 INFO:twisted:scrapy.webservice.WebService starting on 6080
5 INFO:twisted:Spider opened
6 INFO:twisted:Spider opened
7 INFO:twisted:Received SIGINT, shutting down gracefully. Send again to force unclean shutdown
8 INFO:twisted:Closing spider (shutdown)
9 INFO:twisted:Closing spider (shutdown)
10 INFO:twisted:Dumping spider stats:
11 {'downloader/exception_count': 3,
12 'downloader/exception_type_count/scrapy.exceptions.IgnoreRequest': 3,
13 'downloader/request_bytes': 9973,
与标准错误时扭曲生成的消息相比:
2011-12-16 17:34:56+0800 [expats] DEBUG: number of rules: 4
2011-12-16 17:34:56+0800 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023
2011-12-16 17:34:56+0800 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080
2011-12-16 17:34:56+0800 [iproperty] INFO: Spider opened
2011-12-16 17:34:56+0800 [iproperty] DEBUG: Redirecting (301) to <GET http://www.iproperty.com.sg/> from <GET http://iproperty.com.sg>
2011-12-16 17:34:57+0800 [iproperty] DEBUG: Crawled (200) <
我试过%(name)s、%(module)s等,但似乎无法显示蜘蛛名称。有人知道答案吗?
编辑:在设置中使用LOG_FILE
和LOG_LEVEL
的问题是,标准错误时不会显示较低级别的消息。
8条答案
按热度按时间hwamh0ep1#
您要使用
ScrapyFileLogObserver
。我很高兴你问了这个问题,我一直想自己做这个。
57hvy0tb2#
使用以下命令可以很容易地重定向输出:
scrapy some-scrapy's-args 2>&1 | tee -a logname
这样,所有scrappy输出到stdout和stderr的内容都将被重定向到一个日志名文件,并打印到屏幕上。
rhfm7lfc3#
对于那些在阅读当前文档版本之前来到这里的人:
rm5edbpk4#
我知道这是旧的,但这是一个真正有帮助的职位,因为类仍然没有正确地记录在Scrapy文档。而且,我们可以跳过导入日志和直接使用scrapy日志。谢谢所有!
nmpmafwu5#
正如刮骨官所说:
Scrapy使用Python内置的日志系统来记录事件。
因此,您可以像配置普通Python脚本一样配置记录器。
首先,您必须导入日志模块:
您可以将此行添加到蜘蛛:
它添加了一个流处理程序以将日志记录到控制台。
之后,您必须配置日志文件路径。
添加一个名为
custom_settings
的dict,其中包含spider指定的设置:全班同学看起来都像:
s4chpxco6#
不再支持ScrapyFileLogObserver。您可以使用标准python日志记录模块。
xxls0lw87#
到Scrapy 2.3为止,上面提到的解决方案对我都不起作用。另外,文档中找到的解决方案导致每个消息都覆盖日志文件,这当然不是您想要的日志。我找不到将模式更改为“a”(附加)的内置设置。我使用以下配置代码实现了对file和stdout的日志记录:
gxwragnw8#
另一种方法是禁用Scrapy的日志设置并使用自定义设置文件。
settings.py
logging.yml
示例_蜘蛛.py