Scrapy紀錄檔


紀錄檔記錄是指使用內建的紀錄檔系統和定義的函式或類來實現應用程式和庫的事件跟蹤。 記錄紀錄檔是一個即用型的程式庫,它可以在Scrapy設定紀錄檔記錄中的設定列表工作。 Scrapy將執行命令時使用 scrapy.utils.log.configure_logging() 設定一些預設設定和如何處理這些設定。

紀錄檔級別 - Log levels

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

現在,也可以使用 loggers 來關閉訊息,通過記錄紀錄檔助手來獲取紀錄檔訊息,如下圖所示:

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

Spider的紀錄檔記錄

每個 spider 範例都有一個內建記錄器,並可呼叫如下:

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)

在上面的程式碼中,logger是使用蜘蛛的名字建立的,但您可以使用Python提供的自定義 logger,如下面的程式碼:

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 將組態 logger 的處理程式。

紀錄檔訊息設定

下面給出的設定用於組態紀錄檔記錄:

LOG_FILELOG_ENABLED 決定紀錄檔訊息目的地。

當您設定了 LOG_ENCODING ,它不會顯示紀錄檔輸出訊息。

LOG_LEVEL 設定確定訊息的嚴重性順序;嚴重程度不高的訊息將被過濾掉。

LOG_FORMATLOG_DATEFORMAT 用於指定所有訊息的布局。

當您設定 LOG_STDOUT 為 true ,所有的進程的標準輸出和錯誤訊息將被重定向到紀錄檔中。

命令列選項

Scrapy設定可以通過命令列引數來覆蓋,如下面的表:

S.N. 命令 描述
1 —logfile FILE 覆蓋 LOG_FILE
2 —loglevel/-L LEVEL 覆蓋 LOG_LEVEL
3 —nolog 設定 LOG_ENABLED 為 false

要手動組態紀錄檔輸出,可以使用 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
)

參考 - https://doc.scrapy.org/en/0.24/topics/logging.html