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_FILE 和 LOG_ENABLED 決定日誌消息目的地。
當您設置了 LOG_ENCODING ,它不會顯示日誌輸出消息。
LOG_LEVEL 設置確定消息的嚴重性順序;嚴重程度不高的消息將被過濾掉。
LOG_FORMAT 和 LOG_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
)