我曾在一个项目中使用过Scrapy,其中我有自己的JSON日志记录格式。
我希望避免Scrapy中的任何多行stacktrace,尤其是robots.txt
中的中间件。我希望它是一个正确的一行错误或整个stacktrace捆绑到一个消息中。
如何禁用或覆盖这种日志记录行为?下面是我从robots.txt
的下载中间件获得的一个示例stacktrace
2017-10-03 19:08:57 [scrapy.downloadermiddlewares.robotstxt] ERROR: Error downloading <GET http://www.example.com/robots.txt>: DNS lookup failed: no results for hostname lookup: www.example.com. Traceback (most recent call last): File "/Users/auser/.virtualenvs/myenv/lib/python3.5/site-packages/twisted/internet/defer.py", line 1384, in _inlineCallbacks
result = result.throwExceptionIntoGenerator(g) File "/Users/auser/.virtualenvs/myenv/lib/python3.5/site-packages/twisted/python/failure.py", line 393, in throwExceptionIntoGenerator
return g.throw(self.type, self.value, self.tb) File "/Users/auser/.virtualenvs/myenv/lib/python3.5/site-packages/scrapy/core/downloader/middleware.py", line 43, in process_request
defer.returnValue((yield download_func(request=request,spider=spider))) File "/Users/auser/.virtualenvs/myenv/lib/python3.5/site-packages/twisted/internet/defer.py", line 653, in _runCallbacks
current.result = callback(current.result, *args, **kw) File "/Users/auser/.virtualenvs/myenv/lib/python3.5/site-packages/twisted/internet/endpoints.py", line 954, in startConnectionAttempts
"no results for hostname lookup: {}".format(self._hostStr) twisted.internet.error.DNSLookupError: DNS lookup failed: no results for hostname lookup: www.example.com.
1条答案
按热度按时间iyzzxitl1#
我不知道为什么不喜欢多行的错误信息(这是异常的追溯打印)。无论如何,我们可以自定义Scrapy日志的格式。假设你是通过
scrapy
命令行运行你的抓取脚本,例如,scrapy crawl
或scrapy runspider
。下面是一个示例代码(python 3版本),展示了如何使用你自己的格式化程序。以下是一些解释。
scrapy
本身使用了python内置的日志系统。因此你需要一些python日志的基本知识,特别是Logger
,Handler
,Filter
和Formatter
类之间的关系。我强烈推荐python日志的工作流程。scrapy
命令行运行的,例如scrapy crawl
或scrapy runspider
,那么Scrapy函数[configure_logging](https://docs.python.org/2/howto/logging.html#logging-flow)
会被调用来初始化日志记录。Scrapy日志记录的指令可以给予一些如何定制日志记录的指令,通过Scrapy设置你可以访问你的设置。1.示例代码的工作原理。基本工作流程为:
root
记录器,并将格式化程序设置为root
的所有处理程序。如果您编写自己的脚本并使用Scrapy作为API,请参阅[从脚本运行Scrapy](https://doc.scrapy.org/en/latest/topics/practices.html#run-scrapy-from-a-script),然后您需要自己配置日志记录。
上述格式化程序在spider初始化之前不会工作。下面是一些打印文件:
您可以看到,运行spider之后,所有消息都格式化为一行(通过删除
'\n'
)。