Scrapy – 日志
描述
日志 是指对事件的跟踪,它使用内置的日志系统并定义函数和类来实现应用程序和库。日志是一个现成的材料,它可以与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")
现在,你也可以使用记录器将消息包围起来,使用记录帮助器记录,以获得清晰显示的记录消息,如下图所示
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 | --logovel/-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) 它为根记录器创建和配置处理程序。默认情况下,它是 无。 |
2 | install_root_handler (bool) 它指定安装根日志处理程序。默认情况下,它是 True。 |
上述函数-
- 通过Python标准日志路由警告和扭曲的日志。
- 为Scrapy分配DEBUG,为Twisted日志分配ERROR级别。
- 如果LOG_STDOUT设置为true,则将stdout路由到日志。
默认选项可以用 settings 参数来覆盖。如果没有指定设置,则使用默认值。当install_root_handler被设置为true时,可以为root logger创建处理程序。如果它被设置为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
)