2015-09-28 58 views
3

顯然,我不應該再使用ScrapyFileLogObserver(http://doc.scrapy.org/en/1.0/topics/logging.html)。但我仍然希望能夠將日誌消息保存到文件中,並且我仍然希望將所有標準Scrapy控制檯信息都保存到文件中。Scrapy:無ScrapyFileLogObserver()記錄到文件

從如何使用日誌模塊讀了,這是我曾嘗試使用代碼:

class BlahSpider(CrawlSpider): 
    name = 'blah' 
    allowed_domains = ['blah.com'] 
    start_urls = ['https://www.blah.com/blahblahblah'] 

    rules = (
     Rule(SgmlLinkExtractor(allow=r'whatever'), callback='parse_item', follow=True), 
    ) 

    def __init__(self): 
     CrawlSpider.__init__(self) 
     self.logger = logging.getLogger() 
     self.logger.setLevel(logging.DEBUG) 
     logging.basicConfig(filename='debug_log.txt', filemode='w', format='%(asctime)s %(levelname)s: %(message)s', 
          level=logging.DEBUG) 
     console = logging.StreamHandler() 
     console.setLevel(logging.DEBUG) 
     simple_format = logging.Formatter('%(levelname)s: %(message)s') 
     console.setFormatter(simple_format) 
     self.logger.addHandler(console) 
     self.logger.info("Something") 

    def parse_item(self): 
     i = BlahItem() 
     return i 

它運行正常,並將其保存在「東西」的文件。但是,我在命令提示符窗口中看到的所有東西,以前用於ScrapyFileLogObserver時保存到文件中的所有內容現在都不會保存。

我以爲我的「控制檯」處理程序與「logging.StreamHandler()」應該處理,但這正是我讀過的,我真的不明白它是如何工作的。

任何人都可以指出我錯過了什麼或我哪裏出了錯?

謝謝。

回答

3

我認爲問題在於你已經使用了basicConfigaddHandler

配置兩個獨立的處理程序:

self.logger = logging.getLogger() 
self.logger.setLevel(logging.DEBUG) 

logFormatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s') 

# file handler 
fileHandler = logging.FileHandler("debug_log.txt") 
fileHandler.setLevel(logging.DEBUG) 
fileHandler.setFormatter(logFormatter) 
self.logger.addHandler(fileHandler) 

# console handler 
consoleHandler = logging.StreamHandler() 
consoleHandler.setLevel(logging.DEBUG) 
consoleHandler.setFormatter(logFormatter) 
self.logger.addHandler(consoleHandler) 

參見: