Scrapy 日志服务
日志记录意味着跟踪事件,它使用内置的日志记录系统并定义函数和类来实现应用程序和库。 Logging 是一种即用型材料,可以与 Logging settings 中列出的 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")
现在,我们还可以使用日志记录器将消息封装起来,使用日志记录助手 logging 来获取清晰显示的日志记录消息,如下所示
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 | --logfile FILE | 覆盖 LOG_FILE |
2 | --loglevel/-L LEVEL | 覆盖 LOG_LEVEL |
3 | --nolog | 将 LOG_ENABLED 设置为 False |
scrapy.utils.log 模块
此函数可用于初始化 Scrapy 的日志记录默认值。
scrapy.utils.log.configure_logging(settings = None, install_root_handler = True)
序号 | 参数 | 描述 |
---|---|---|
1 | settings (dict, None) | 它为根记录器创建和配置处理程序。 默认情况下,它是 None 。 |
2 | install_root_handler (bool) | 它指定安装根日志记录处理程序。 默认情况下,它是 True。 |
上述功能
- 通过 Python 标准日志记录路由警告和扭曲的日志记录。
- 将 DEBUG 分配给 Scrapy 并将 ERROR 级别分配给 Twisted 记录器。
- 如果 LOG_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
)