scrapy默认日志仅输出到终端不生成文件,需配置log_file参数才能持久化保存;通过settings.py设置log_file和log_level可自动写入日志文件,且自定义日志统一进入该文件或终端。

Scrapy项目运行时默认只在终端输出日志,不生成文件,想永久保留或排查问题必须手动配置输出路径,否则关掉终端日志就彻底丢失。
确认日志当前输出位置
运行爬虫时观察终端输出的首行信息,如果看到类似 2026-08-18 10:26:12 [scrapy.utils.log] INFO: Scrapy 2.11.2 started 这样的带时间戳和组件名的行,说明日志正通过标准错误(stderr)实时打印在控制台——这是Scrapy默认行为,【没有设置LOG_FILE时日志不会落盘】。
执行 scrapy crawl myspider --nolog 后终端完全静默,证明日志系统已被关闭;反过来,加 --logfile debug.log 就会立刻生成文件——命令行参数优先级高于settings.py,这点必须记住。
让日志自动写入文件
打开项目根目录下的 scrapy.cfg 同级的 settings.py 文件。
在文件末尾新增两行:
LOG_FILE = "scrapy_output.log"
LOG_LEVEL = "INFO"
保存后重新运行 scrapy crawl myspider,当前目录下立即生成 scrapy_output.log。注意:如果该文件已存在,Scrapy默认以追加模式(a)写入,旧日志不会被清空。
这一步漏掉 LOG_LEVEL 会导致文件里只有 WARNING 及以上级别内容,DEBUG 和 INFO 全部过滤掉——因为 settings.py 中未显式声明时,LOG_LEVEL 实际取值取决于 Scrapy 版本内置默认值,不同版本可能不同。
在Spider代码里打自定义日志
方法一:直接使用Spider实例自带的logger
在 spider 文件的 parse 方法内写:self.logger.info("页面解析完成,共提取 %d 条数据", len(items))。这种写法会自动带上 spider 名称和模块路径,调试时定位快。
方法二:用 Python 标准 logging 模块
在 spider 文件顶部加 import logging,然后定义 logger = logging.getLogger(__name__),再调用 logger.warning("遇到反爬响应:%s", response.status)。注意:这种方式打出的日志名是模块全路径,比如 myproject.spiders.my_spider,和 self.logger 的命名空间不同。
【两种方式打出的日志都会进入 LOG_FILE(如果已配置)或终端,但不会各自独立成文件】。
快速查看最近一次运行的日志
第一步:进入你的 Scrapy 项目根目录(即包含 scrapy.cfg 的那一层)。
第二步:执行 ls -t | head -n 5(macOS/Linux)或 dir /o-d(Windows cmd)列出按修改时间倒序的文件。
第三步:找名字含 .log 或 scrapy 的最新文件,用 tail -n 20 scrapy_output.log(Linux/macOS)或 Get-Content scrapy_output.log -Tail 20(PowerShell)查看末尾20行。
这一步跳过编辑器直接命令行读取,避免误删或卡死大日志文件。如果日志文件超过100MB,tail 依然秒出结果,而用记事本打开可能直接无响应。











