Scrapy Log Handler
-
25-10-2019 - |
Frage
Ich suche Ihre Hilfe in den folgenden 2 Fragen - wie stelle ich den Handler für die verschiedenen Protokollebenen wie in Python fest? Derzeit habe ich
STATS_ENABLED = True
STATS_DUMP = True
LOG_FILE = 'crawl.log'
Die von Scrapy generierten Debug -Nachrichten werden jedoch ebenfalls in die Protokolldateien hinzugefügt. Diese sind sehr lang und im Idealfall, ich möchte, dass die Debug -Level -Nachrichten auf Standardfehler und Info -Nachrichten auf meine abgelassen werden LOG_FILE
.
Zweitens heißt es in den Dokumenten The logging service must be explicitly started through the scrapy.log.start() function.
Meine Frage ist, wo leite ich das scrapy.log.start()
? Ist es in meiner Spinne?
Lösung 3
Hmm,
Ich wollte nur aktualisieren, dass ich den Protokollierungsdateihandler mithilfe verwenden kann
from twisted.python import log
import logging
logging.basicConfig(level=logging.INFO, filemode='w', filename='log.txt'""")
observer = log.PythonLoggingObserver()
observer.start()
Ich kann das Protokoll jedoch nicht dazu bringen, den Namen der Spinnen wie aus Twisted in Standardfehler anzuzeigen. Ich habe das gepostet Frage.
Andere Tipps
Zweitens heißt es in den Dokumenten
The logging service must be explicitly started through the scrapy.log.start() function
. Meine Frage ist, wo führe ich diese Scrapy.log.start () aus? Ist es in meiner Spinne?
Wenn Sie eine Spinne verwenden, verwenden Sie scrapy crawl my_spider
- Das Protokoll wird automatisch gestartet, wenn STATS_ENABLED = True
Wenn Sie den Crawler -Prozess manuell starten, können Sie dies tun scrapy.log.start()
Vor Beginn des Crawler -Prozesses.
from scrapy.crawler import CrawlerProcess
from scrapy.conf import settings
settings.overrides.update({}) # your settings
crawlerProcess = CrawlerProcess(settings)
crawlerProcess.install()
crawlerProcess.configure()
crawlerProcess.crawl(spider) # your spider here
log.start() # depends on LOG_ENABLED
print "Starting crawler."
crawlerProcess.start()
print "Crawler stopped."
Das kleine Wissen, das ich über Ihre erste Frage habe:
Da Sie das Scrapy -Protokoll manuell starten müssen, können Sie Ihren eigenen Logger verwenden.
Ich denke, Sie können das Modul kopieren scrapy/scrapy/log.py
in Scrapy -Quellen modifizieren Sie es, importieren Sie es anstelle von scrapy.log
und Renn start()
- Scrapy verwendet Ihr Protokoll. Darin gibt es eine Linie in der Funktion start()
was sagt log.startLoggingWithObserver(sflo.emit, setStdout=logstdout)
.
Machen Sie Ihren eigenen Beobachter (http://docs.python.org/howto/logging-cookbook.html#logging-to-multiple-destinations) und benutze es dort.
Ich möchte, dass die Debug -Level -Nachrichten zu Standardfehler und Info -Nachrichten zu meinem log_file gelassen werden.
Sie können festlegen LOG_LEVEL = 'INFO'
In Settings.py, aber es wird Debug -Nachrichten vollständig deaktivieren.
scrapy some-scrapy's-args -L 'INFO' -s LOG_FILE=log1.log
Ausgänge werden in eine Protokollname -Datei umgeleitet.