Scrapy 教程

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/scrapy-logging.html

Scrapy日志


日志记录是指使用内置的日志系统和定义的函数或类来实现应用程序和库的事件跟踪。 记录日志是一个即用型的程序库,它可以在Scrapy设置日志记录中的设置列表工作。 Scrapy将运行命令时使用 scrapy.utils.log.configure_logging() 设置一些默认设置和如何处理这些设置。

日志级别 - Log levels

在Python中日志消息有五种不同级别的严重程度。下面的列表以升序显示标准的日志消息:

  • logging.DEBUG - 用于调试信息(最低严重性)

  • logging.INFO - 用于信息消息

  • logging.WARNING - 用于警告消息

  • logging.ERROR- 用于正则错误

  • logging.CRITICAL - 用于严重错误(最高严重性)

如何记录消息

下面给出简单的代码显示日志记录是使用 logging.info 级别的消息。

import logging
logging.info("This is an information")

以上日志信息可以通过使用 logging.log 参数传递,如下所示:

import logging
logging.log(logging.INFO, "This is an information")

现在,也可以使用 loggers 来关闭消息,通过记录日志助手来获取日志消息,如下图所示:

import logging
logger = logging.getLogger()
logger.info("This is an information")

可以有多个记录器,可以通过 logging.getLogger()函数使用名字进行访问,如下图所示。

import logging
logger = logging.getLogger('mycustomlogger')
logger.info("This is an information")

自定义记录器可以通过使用模块路径 name 变量用于其它任何模块中,如下所示:

import logging
logger = logging.getLogger(__name__)
logger.info("This is an information")

Spider的日志记录

每个 spider 实例都有一个内置记录器,并可调用如下:

import scrapy
class LogSpider(scrapy.Spider):

    name = 'logspider'
    start_urls = ['http://dmoz.com']

    def parse(self, response):
        self.logger.info('Parse function called on %s', response.url)

在上面的代码中,logger是使用蜘蛛的名字创建的,但您可以使用Python提供的自定义 logger,如下面的代码:

import logging
import scrapy

logger = logging.getLogger('customizedlogger')
class LogSpider(scrapy.Spider):

    name = 'logspider'
    start_urls = ['http://dmoz.com']

    def parse(self, response):
        logger.info('Parse function called on %s', response.url)

日志记录配置

记录器不能够显示由自己发出消息。因此,它们需要“处理程序”显示这些消息,以及处理程序将它们被重定向这些消息到各自的目的地,如文件,电子邮件,标准输出。

根据下面的设置,Scrapy 将配置 logger 的处理程序。

日志消息设置

下面给出的设置用于配置日志记录:

LOG_FILELOG_ENABLED 决定日志消息目的地。

当您设置了 LOG_ENCODING ,它不会显示日志输出消息。

LOG_LEVEL 设置确定消息的严重性顺序;严重程度不高的消息将被过滤掉。

LOG_FORMATLOG_DATEFORMAT 用于指定所有消息的布局。

当您设置 LOG_STDOUT 为 true ,所有的进程的标准输出和错误消息将被重定向到日志中。

命令行选项

Scrapy设置可以通过命令行参数来覆盖,如下面的表:

S.N. 命令 描述
1 —logfile FILE 覆盖 LOG_FILE
2 —loglevel/-L LEVEL 覆盖 LOG_LEVEL
3 —nolog 设置 LOG_ENABLED 为 false

要手动配置日志输出,可以使用 logging.basicConfig(),如下所示:

import logging
from scrapy.utils.log import configure_logging

configure_logging(install_root_handler=False)
logging.basicConfig(
    filename='logging.txt',
    format='%(levelname)s: %(your_message)s',
    level=logging.INFO
)

参考 - https://doc.scrapy.org/en/0.24/topics/logging.html