📜  Scrapy-日志记录

📅  最后修改于: 2020-10-31 14:40:10             🧑  作者: Mango


描述

日志记录意味着跟踪事件,该事件使用内置的日志记录系统并定义函数和类以实现应用程序和库。日志记录是一种现成的资料,可以与“日志记录”设置中列出的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_FILELOG_ENABLED决定日志消息的目的地。

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

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

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

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

命令行选项

可以通过传递命令行参数来覆盖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模块

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

scrapy.utils.log.configure_logging(settings = None, install_root_handler = True)
Sr.No Parameter & Description
1

settings (dict, None)

It creates and configures the handler for root logger. By default, it is None.

2

install_root_handler (bool)

It specifies to install root logging handler. By default, it is True.

上面的函数-

  • 通过Python标准日志记录路由警告和扭曲的日志记录。
  • 将“调试”分配给“ Scrapy”,将“错误”级别分配给Twisted记录器。
  • 如果LOG_STDOUT设置为true,则将stdout路由到日志。

可以使用settings参数覆盖默认选项。如果未指定设置,则使用默认值。当install_root_handler设置为true时,可以为root记录器创建处理程序。如果将其设置为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 
)