Scrapy框架 - 着色日志记录

时间:2017-02-07 16:34:33

标签: python logging colors scrapy

我正在尝试制作Scrapy输出彩色日志。我对Python日志记录并不熟悉,但我的理解是我必须创建自己的Formatter并让它由Scrapy使用。我成功地使用Clint将Formatter设置为着色输出。

我的问题是我不能正确地在Scrapy中使用它。我本来希望我的蜘蛛中的logger对象有一个处理程序,然后我会切换该处理程序的格式化程序。当我查看spider.logger.logger内的内容时,我看到handler是一个空列表。我尝试在新的流处理程序中添加格式化程序。

crawler.spider.logger.logger.addHandler(sh) 其中sh是使用我的颜色格式化程序的处理程序。

这个添加效果可以使每个消息两次输出。第一条消息是彩色的,但没有Scrapy格式。第二个是没有颜色的Scrapy格式。

如何使Scrapy输出彩色日志保持与settings.py

中设置的格式相同

由于

1 个答案:

答案 0 :(得分:5)

如果您只想着色LogRecord,则可以使用ANSI转义码在 foreach ($i = 0; $i <= $List; $i++) { foreach($ii = 0; $ii2 <= $List 2; ii++) { } // something } 中自定义LOG_FORMAT

示例:

settings.py

如果您还想使用不同颜色为不同的日志级别着色,则可以覆盖LOG_FORMAT = '\x1b[0;0;34m%(asctime)s\x1b[0;0m \x1b[0;0;36m[%(name)s]\x1b[0;0m \x1b[0;0;31m%(levelname)s\x1b[0;0m: %(message)s' source code)。

将它放在scrapy.utils.log._get_handler

的顶部附近
settings.py

它的作用是在调用原始import scrapy.utils.log _get_handler = copy.copy(scrapy.utils.log._get_handler) def _get_handler_custom(*args, **kwargs): handler = _get_handler(*args, **kwargs) handler.setFormatter(your_custom_formatter) return handler scrapy.utils.log._get_handler = _get_handler_custom 后重置格式化程序,然后将其重新附加到_get_handler。 这是一个hacky解决方案,可能不是最好的做法,但它只是有效。

更实际的方法是覆盖scrapy.utils.log。 SO上有a bunch of discussion可以引导您走向正确的方向。

在这里,我提供了我的项目中使用的完整工作代码(正在使用第三方软件包colorlog。)

logging.StreamHandler

settings.py