如何将 scrapy.log 模块与自定义日志处理程序一起使用?

2023-11-22

我一直在研究一个Scrapy项目,到目前为止一切都进展顺利。然而,我对 Scrapy 的日志配置可能性并不满意。此刻,我已设定LOG_FILE = 'my_spider.log' in the settings.py我的项目。当我执行时scrapy crawl my_spider在命令行上,它会为整个爬行过程创建一个大日志文件。这对于我的目的来说是不可行的。

如何将 Python 的自定义日志处理程序与scrapy.log模块?特别是,我想利用Pythonlogging.handlers.RotatingFileHandler这样我就可以将日志数据分成几个小文件,而不必处理一个大文件。不幸的是,Scrapy 日志记录工具的文档不是很广泛。提前谢谢了!


您可以通过首先在 scrapy.utils.log.configure_logging 中禁用根句柄,然后添加您自己的日志处理程序,将所有 scrapy 日志记录到文件中。

在scrapy项目的settings.py文件中添加以下代码:

import logging
from logging.handlers import RotatingFileHandler

from scrapy.utils.log import configure_logging

LOG_ENABLED = False
# Disable default Scrapy log settings.
configure_logging(install_root_handler=False)

# Define your logging settings.
log_file = '/tmp/logs/CRAWLER_logs.log'

root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
rotating_file_log = RotatingFileHandler(log_file, maxBytes=10485760, backupCount=1)
rotating_file_log.setLevel(logging.DEBUG)
rotating_file_log.setFormatter(formatter)
root_logger.addHandler(rotating_file_log)

我们还根据需要自定义日志级别(DEBUG 到 INFO)和格式化程序。 要在蜘蛛、管道中添加自定义日志,我们可以像普通的 python 日志记录一样轻松地执行此操作,如下所示:

pipelines.py 内部

import logging
logger = logging.getLogger()
logger.info('processing item')

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 scrapy.log 模块与自定义日志处理程序一起使用? 的相关文章

随机推荐

  • GAWK:strftime() 的逆 - 使用格式模式将日期字符串转换为自纪元时间戳以来的秒数

    Gnu AWK 提供内置函数 strftime 它可以转换时间戳1359210984 into Sat 26 Jan 15 36 24 CET 2013 我找不到可以执行此操作的函数 seconds timefromdate Sat 26
  • 如何在 iOS 9.0 Beta 中实现新的 Core Data 模型构建器“唯一”属性

    在 WWDC15 视频会议中 核心数据的新变化 在 10 45 分钟 演示开始时 Apple 工程师描述了模型构建器的一项新功能 该功能允许您指定独特的属性 一旦设置了这些唯一属性 Core Data 将不会创建具有该属性的重复对象 这是为
  • 根据两列分配唯一ID [重复]

    这个问题在这里已经有答案了 我有一个数据框 df 如下所示 School Student Year A 10 1999 A 10 2000 A 20 1999 A 20 2000 A 20 2001 B 10 1999 B 10 2000
  • MediaPlayer 在 Android 4.4 上随机停止 (19)

    我的应用程序在除 Nexus 5 之外的所有设备上都可以正常传输音频 在 Nexus 5 上 MediaPlayer 随机停止播放 不确定响度是否发生变化 http developer android com about versions
  • Boost Spirit可以用来解析字节流数据吗?

    Spirit Boost C 库的一部分 可以用来解析来自流的二进制数据吗 例如 它可以用来将来自套接字的数据解析为结构 字节和单独的位标志吗 谢谢 Boost Spirit 允许使用定义解析器扩展巴科斯 诺尔范式 EBNF 语法与模板元编
  • DataFrame 到列表的列表,不更改值的数据类型

    df values to list or list df values 将数据帧转换为列表列表 但整数值转换为浮点值 数据框是 HSCode value year 0 2 0 18 2018 1 3 0 00 2018 2 4 12 48
  • Django:查询使用包含列表中的每个值

    我需要执行 django 查询来检查字段是否包含列表中的所有值 该列表的长度会有所不同 Example User objects filter first name contains x y z import operator from d
  • 在 GCC 中动态创建 va_list - 可以做到吗?

    我的问题是vsprintf是我无法直接获取输入参数 我必须先逐一获取输入并将它们保存在void 然后通过这个void to vsprintf 对于windows来说一切都很好 但是当我来到64位linux时 gcc无法编译 因为它不允许从v
  • 如何使用 FB FQL 多重查询的结果?

    我对 Facebook 的 fql multiquery 方法感到困惑 我正在尝试检索一篇文章的所有评论 然后检索每个评论的用户信息 我可以毫无问题地获得评论 但我很难获得用户 目前我正在使用以下内容 FB api method fql m
  • Flask-OIDC redirect_uri 值在某处被覆盖?

    我已经安装了 Flask OIDC 并尝试使用我公司的服务对用户进行身份验证 我正在使用 client secrets json 文件 该文件正在正确读取 解析和发送 client id client secret 和其他值 我将redir
  • Meteor Up Docker 和 Graphicsmagick

    我正在寻找如何在 Meteor Up Docker 上安装 Graphicsmagick 我找到了这个解决方案 访问 docker 内的二进制文件 但我无法工作 我该把这些线放在哪里start sh meteorDockerId docke
  • VB / C#:平均调整两个控件的大小

    我创建了一个窗口 其中有两个组 面板以及它们之间的一些按钮 我想以一种方式对调整大小行为进行编码 当窗口扩展时 两个面板会增加宽度 同时保持它们之间的距离不变 请看这个模型 正如您在上面看到的 我希望调整 本地 和 服务器 面板的大小 同时
  • 如何查看Lucene索引

    我正在尝试学习和理解 lucene 是如何工作的 lucene 索引里面有什么 基本上我想看看数据在 lucene 索引中是如何表示的 我在用lucene core 8 6 0作为依赖 下面是我非常基本的 Lucene 代码 private
  • Spinner OnItemSelectedListener

    我找不到如何在单声道中执行此操作的示例 有什么帮助吗 编辑 添加代码 foreach equip item in list tr new TableRow this sp new Spinner this sp LayoutParamete
  • 使用 R 的日历时间序列

    如何制作日历时间序列图表this与ggplot2 我找不到任何东西 所以我继续写下来 Makes calendar time series plot The version rendered on the screen might look
  • 使用 mysqldump 备份具有 GEOMETRY 列的表?

    我最近创建了一个 MySQL 表 其中包含 GEOMETRY 类型的列 当我使用 mysqldump 备份表时 它将几何列输出为带引号的字符串 其中包含一些转义字符 例如 0 以及一些看起来像上位 ASCII 范围中的原始二进制字节的字符
  • 带有特殊字符的 NSURL

    如何编码此 url 以显示在 UIWebview 中 http de wikipedia org search Bev lkerungsentwicklung I tried stringByAddingPercentEscapesUsin
  • 在水平分割或垂直分割中打开窗口

    我希望同时打开 NERDTree 和 TagList 但我不需要它们具有屏幕的整个高度 相反 我想让它们在单个垂直分割中水平分割 更具体地说 我希望能够打开一个 NERDTree 并让它占据屏幕的整个高度 然后 当我打开 TagList 时
  • Python编程:仅在命令提示符下获取“名称'Tk'未定义”,在IDLE中有效[重复]

    这个问题在这里已经有答案了 刚开始使用 Tkinter 的初学者的问题 我下载了并写了教程Hello World程序 并且在 IDLE 下运行良好 但是 当我保存程序并使用命令提示符运行它时 它们都返回NameError name tk i
  • 如何将 scrapy.log 模块与自定义日志处理程序一起使用?

    我一直在研究一个Scrapy项目 到目前为止一切都进展顺利 然而 我对 Scrapy 的日志配置可能性并不满意 此刻 我已设定LOG FILE my spider log in the settings py我的项目 当我执行时scrapy