Scrapy - 日誌記錄



描述

日誌記錄是指對事件的跟蹤,它使用內建的日誌系統並定義函式和類來實現應用程式和庫。日誌記錄是一個現成的工具,可以與列在日誌記錄設定中的 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")

從爬蟲中記錄日誌

每個爬蟲例項在其內部都有一個logger,可以使用如下所示:

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)

在上面的程式碼中,日誌記錄器是使用爬蟲的名稱建立的,但是您可以使用 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時,程序的所有標準輸出和錯誤訊息都將重定向到日誌。

命令列選項

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 標準日誌記錄路由警告和 Twisted 日誌記錄。
  • 將 DEBUG 分配給 Scrapy,並將 ERROR 級別分配給 Twisted 日誌記錄器。
  • 如果 LOG_STDOUT 設定為 true,則將 stdout 路由到日誌。

可以使用settings引數覆蓋預設選項。如果未指定設定,則使用預設值。當 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 
)
廣告