存在问题
Scrapy 在 Pycharm 中运行时,日志在终端输出的样式为红色,分析原因为:pycharm 会将 sys.stderr
的内容渲染为红色;
需要知道 scrapy 中的日志如何进行初始化的。
scrapy.utils.log
该模块位于 scrapy/utils/log.py
,负责对scrapy框架的日志进行配置
configure_logging
configure_logging
函数负责配置 log,主要做三件事:
- 将 twisted 的日志使用 python 标准日志库 logging 进行日志输出
# 转发 twisted 的日志到标准库中
observer = twisted_log.PythonLoggingObserver("twisted")
observer.start()
- 将 DEBUG 级别的日志分配给 Scrapy 的 logger,将 ERROR 级别的日志分配给 Twisted 的 logger
- 将标准输出变成日志输出(
LOG_STDOUT
配置)
if settings.getbool("LOG\_STDOUT"):
sys.stdout = StreamLogger(logging.getLogger("stdout")) # type: ignore[assignment]
# 将标准输出改为 logger
该函数在 install_root_handler
为 True (默认)的情况下会调用 install_scrapy_root_handler
install_scrapy_root_handler
install_scrapy_root_handler
该函数会给 logging.root
添加一个 handler(由 _get_handler
从 settings 中读取配置)
# scrapy/utils/log.py#143
# settings 为从 settings.py 读取的配置信息
def \_get\_handler(settings: Settings) -> logging.Handler:
"""Return a log handler object according to settings"""
filename = settings.