scrapy

2013-04-18 15 views
7

मैं ऐसा करके scrapy का एक लॉग चला रहा हूँ में विशिष्ट त्रुटि लॉग फ़ाइल के लिए लॉग इन करना:scrapy

from scrapy import log 
class MySpider(BaseSpider): 
    name = "myspider" 

    def __init__(self, name=None, **kwargs): 
     LOG_FILE = "logs/spider.log" 
     log.log.defaultObserver = log.log.DefaultObserver() 
     log.log.defaultObserver.start() 
     log.started = False 
     log.start(LOG_FILE, loglevel=log.INFO) 
     super(MySpider, self).__init__(name, **kwargs) 

    def parse(self,response): 
     .... 
     raise Exception("Something went wrong!") 
     log.msg('Something went wrong!', log.ERROR) 

     # Somehow write to a separate error log here. 

तो मैं इस तरह मकड़ी चलाएँ:

scrapy crawl myspider 

यह सब लॉग संग्रहीत करेंगे .INFO डेटा के साथ-साथ log.ERROR spider.log में।

यदि कोई त्रुटि होती है, तो मैं उन विवरणों को spider_errors.log नामक एक अलग लॉग फ़ाइल में स्टोर करना भी चाहूंगा। यह पूरे spider.log फ़ाइल (जो कि बहुत बड़ा हो सकता है) के माध्यम से स्कैन करने की कोशिश करने के बजाय हुई त्रुटियों की खोज करना आसान बना देगा।

क्या ऐसा करने का कोई तरीका है?

संपादित करें:

PythonLoggingObserver साथ कोशिश कर रहा है:

def __init__(self, name=None, **kwargs): 
     LOG_FILE = 'logs/spider.log' 
     ERR_File = 'logs/spider_error.log' 

     observer = log.log.PythonLoggingObserver() 
     observer.start() 

     log.started = False  
     log.start(LOG_FILE, loglevel=log.INFO) 
     log.start(ERR_FILE, loglevel=log.ERROR) 

लेकिन मैं ERROR: No handlers could be found for logger "twisted"

+0

'MySpider' कहाँ परिभाषित किया गया है? –

+0

@StevenAlmeroth क्षमा करें, कोड सिर्फ एक स्निपेट था। मैंने इसे और अधिक पूरा करने के लिए अद्यतन किया है। – Bak

उत्तर

9

बस logging काम करते हैं मिलता है। DefaultObserver के बजाय PythonLoggingObserver उपयोग करने के लिए प्रयास करें:

  • कॉन्फ़िगर दो वालों (INFO के लिए एक और ERROR संदेशों के लिए एक) सीधे अजगर में, या fileconfig के माध्यम से, या dictconfig के माध्यम से (docs देखें)
  • मकड़ी के में इसे शुरू __init__:

    def __init__(self, name=None, **kwargs): 
        # TODO: configure logging: e.g. logging.config.fileConfig("logging.conf") 
        observer = log.PythonLoggingObserver() 
        observer.start() 
    

अगर आप लकड़हारा कॉन्फ़िगर करने में सहायता की जरूरत है मुझे जानते हैं रों।

संपादित करें:

एक अन्य विकल्प __init__.py में दो फ़ाइल लॉग पर्यवेक्षकों शुरू करने के लिए है:

from scrapy.log import ScrapyFileLogObserver 
from scrapy import log 


class MySpider(BaseSpider): 
    name = "myspider" 

    def __init__(self, name=None, **kwargs): 
     ScrapyFileLogObserver(open("spider.log", 'w'), level=logging.INFO).start() 
     ScrapyFileLogObserver(open("spider_error.log", 'w'), level=logging.ERROR).start() 

     super(MySpider, self).__init__(name, **kwargs) 

    ... 
+0

मुझे त्रुटि मिल रही है 'त्रुटि: लॉगर के लिए कोई हैंडलर नहीं मिला "मुड़"। – Bak

+0

कृपया, अपनी लॉगिंग कॉन्फ़िगरेशन दिखाएं। समस्या वहाँ है। – alecxe

+0

मैंने मूल पोस्ट में अपने परिवर्तनों के साथ अद्यतन किया है। – Bak

संबंधित मुद्दे