2013-04-18 9 views
7

ich tun dies ein Protokoll der scrapy leite:Protokollierung auf bestimmte Fehlerprotokolldatei in 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. 

Dann laufe ich die Spinne so:

scrapy crawl myspider 

Dies alles das Protokoll gespeichert werden soll .INFO-Daten sowie log.ERROR in spider.log.

Wenn ein Fehler auftritt, möchte ich diese Details auch in einer separaten Protokolldatei mit der Bezeichnung speichern. Es würde es einfacher machen, nach aufgetretenen Fehlern zu suchen, anstatt zu versuchen, die gesamte spider.log Datei zu durchsuchen (was sehr groß sein könnte).

Gibt es eine Möglichkeit, dies zu tun?

EDIT:

mit PythonLoggingObserver Versuch:

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) 

Aber ich bekomme ERROR: No handlers could be found for logger "twisted"

+0

Wo ist 'MySpider' definiert? –

+0

@StevenAlmeroth Sorry, der Code war nur ein Ausschnitt. Ich habe es aktualisiert, um vollständiger zu sein. – Bak

Antwort

9

Lassen logging die Arbeit machen. Versuchen Sie PythonLoggingObserver zu verwenden statt DefaultObserver:

  • configure zwei Logger (ein für INFO und einen für ERROR Nachrichten) direkt in Python oder über fileconfig oder über dictconfig (siehe docs)
  • es in Spinnen starten __init__:

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

Lassen Sie mich wissen, wenn Sie mit der Konfiguration Logger Hilfe benötigen s.

EDIT:

Eine weitere Option ist zwei Dateiprotokoll Beobachter in __init__.py zu starten:

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

Ich bekomme immer den Fehler 'ERROR: Es konnten keine Handler für den Logger gefunden werden" twisted "'. – Bak

+0

Bitte zeigen Sie Ihre Protokollierungskonfiguration an. Das Problem ist da. – alecxe

+0

Ich habe mit meinen Änderungen im ursprünglichen Beitrag aktualisiert. – Bak