Scrapy - 日志记录


描述

日志记录意味着跟踪事件,它使用内置日志系统并定义函数和类来实现应用程序和库。Logging 是一种即用型材料,可以与 Logging 设置中列出的 Scrapy 设置一起使用。

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

日志级别

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

现在,您还可以使用记录器使用日志记录助手记录消息来封装消息,以获得清晰显示的日志消息,如下所示 -

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

从蜘蛛记录

每个蜘蛛实例都有一个记录器,可以按如下方式使用 -

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)

在上面的代码中,记录器是使用 Spider 的名称创建的,但您可以使用 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)

日志记录配置

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

根据以下设置,Scrapy 将为记录器配置处理程序。

记录设置

以下设置用于配置日志记录 -

  • LOG_FILE和LOG_ENABLED决定日志消息目的地。

  • 当您将LOG_ENCODING设置为 false 时,它​​将不会显示日志输出消息。

  • LOG_LEVEL将确定消息的严重性顺序;那些严重性较低的消息将被过滤掉。

  • LOG_FORMAT和LOG_DATEFORMAT用于指定所有消息的布局

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

命令行选项

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

先生编号 命令与说明
1

--日志文件文件

覆盖LOG_FILE

2

--loglevel/-L 级别

覆盖LOG_LEVEL

3

--nolog

LOG_ENABLED设置为 False

scrapy.utils.log 模块

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

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

先生编号 参数及说明
1

设置(字典,无)

它为根记录器创建并配置处理程序。默认情况下,它是None

2

install_root_handler(布尔)

它指定安装根日志记录处理程序。默认情况下,它是True

上述函数 -

  • 通过 Python 标准日志记录发送警告和扭曲的日志记录。
  • 将 DEBUG 分配给 Scrapy,将 ERROR 级别分配给 Twisted 记录器。
  • 如果 LOG_STDOUT 设置为 true,则将 stdout 路由到日志。

可以使用设置参数覆盖默认选项。如果未指定设置,则使用默认值。当 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 
)