Scrapy 简明教程

Scrapy - Logging

Description

Logging 表示使用内置日志系统进行的事件跟踪,并定义用于实现应用程序和库的功能和类。日志记录是一种可随时使用的材料,它可以与记录设置中列出的 Scrapy 设置配合使用。

在运行命令时,Scrapy 会设置一些默认设置,并通过 scrapy.utils.log.configure_logging() 处理这些设置。

Log levels

在 Python 中,一个日志消息具有五种不同的严重程度级别。以下列表以升序列出了标准日志消息 -

  1. logging.DEBUG – 用于调试消息(严重程度最低)

  2. logging.INFO – 用于信息消息

  3. logging.WARNING – 用于警告消息

  4. logging.ERROR – 用于一般错误

  5. logging.CRITICAL − 用于严重错误(最高级别)

How to Log Messages

下面的代码显示使用 logging.info 级别记录消息。

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

上述记录消息可以用 logging.log 作为参数,显示如下:

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

现在,你还可以使用记录器用日志助手日志将消息包含起来以清楚地显示出日志消息,如下所示:

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")

Logging from Spiders

每个爬取器实例都拥有一个 logger ,并可以使用,如下所示:

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)

在上面的代码中,记录器是使用爬取器的名称创建的,但是你可以使用 Python 提供的任何自定义记录器,如下所示:

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)

Logging Configuration

记录器无法自行显示它们发送的消息。因此,它们需要“处理器”来显示这些消息,而处理器会将这些消息重定向到各自的目的地,如文件、电子邮件和标准输出。

根据下列设置,Scrapy 会为记录器配置处理器。

Logging Settings

下列设置用于配置日志 −

  1. LOG_FILELOG_ENABLED 决定了日志消息的目标。

  2. 当你把 LOG_ENCODING 设置为 false 时,它将不会显示日志输出信息。

  3. LOG_LEVEL 将确定消息的严重程度顺序;严重程度较低的消息将被过滤掉。

  4. LOG_FORMATLOG_DATEFORMAT 用于为所有消息指定布局。

  5. 当你把 LOG_STDOUT 设置为 true,所有标准输出和错误信息的过程都会重定向到日志。

Command-line Options

可以通过传递命令行参数来覆盖 Scrapy 设置,如下表所示:

Sr.No

Command & Description

1

--logfile FILE Overrides LOG_FILE

2

--loglevel/-L LEVEL Overrides LOG_LEVEL

3

--nolog Sets LOG_ENABLED to False

scrapy.utils.log module

此函数可用于初始化 Scrapy 的默认日志记录。

scrapy.utils.log.configure_logging(settings = None, install_root_handler = True)

Sr.No

Parameter & Description

1

settings (dict, None) 它创建并配置根记录器的处理器。默认情况下,它是 None。

2

install_root_handler (bool) 它指定安装根日志处理程序。默认情况下,它为 True。

以上函数 −

  1. 通过 Python 标准日志记录路由警告和 Twisted 日志记录。

  2. 将 DEBUG 分配给 Scrapy 和 ERROR 级别分配给 Twisted 日志记录器。

  3. 如果 LOG_STDOUT 设置为 true,则将 stdout 路由到日志。

可以使用 settings 参数覆盖默认选项。当未指定设置时,则使用默认值。当 install_root_handler 设为 true 时,可以为根日志记录器创建处理程序。如果将其设为 false,则不会设置任何日志输出。在使用 Scrapy 命令时,configure_logging 将自动调用,并且在运行自定义脚本时可以显式运行。

若要手动配置日志记录输出,可以使用 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
)