обработчик журнала скрапа - PullRequest
4 голосов
/ 30 ноября 2011

Я прошу вашей помощи в следующих 2 вопросах - Как установить обработчик для различных уровней журнала, как в python.В настоящее время у меня есть

STATS_ENABLED = True
STATS_DUMP = True 

LOG_FILE = 'crawl.log'

Но отладочные сообщения, генерируемые Scrapy, также добавляются в файлы журнала.Они очень длинные и в идеале, я хотел бы, чтобы сообщения уровня DEBUG оставались при стандартной ошибке, а сообщения INFO выводились на мой LOG_FILE.

Во-вторых, в документации написано The logging service must be explicitly started through the scrapy.log.start() function. Мой вопросГде я могу запустить этот scrapy.log.start()?Это внутри моего паука?

Ответы [ 4 ]

4 голосов
/ 30 ноября 2011

Во-вторых, в документах написано The logging service must be explicitly started through the scrapy.log.start() function. Мой вопрос, где запустить этот scrapy.log.start ()? Это внутри моего паука?

Если вы запускаете паука, используя scrapy crawl my_spider - журнал запускается автоматически, если STATS_ENABLED = True

Если вы запустите процесс искателя вручную, вы можете сделать scrapy.log.start() перед запуском процесса искателя.

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."

Немного знаний о вашем первом вопросе:

Поскольку вы должны запускать журнал Scrapy вручную, это позволяет вам использовать свой собственный регистратор.

Я думаю, что вы можете скопировать модуль scrapy/scrapy/log.py в источниках scrapy, изменить его, импортировать вместо scrapy.log и запустить start() - scrapy будет использовать ваш журнал. В ней есть строка в функции start(), которая говорит log.startLoggingWithObserver(sflo.emit, setStdout=logstdout).

Создайте своего собственного наблюдателя (http://docs.python.org/howto/logging-cookbook.html#logging-to-multiple-destinations) и используйте его там.

3 голосов
/ 16 декабря 2011

Хмм,

Просто хотел обновить, что я могу получить обработчик файла журнала в файл с помощью

from twisted.python import log
import logging
logging.basicConfig(level=logging.INFO, filemode='w', filename='log.txt'""")
observer = log.PythonLoggingObserver()
observer.start()

однако я не могу получить журнал для отображения имени пауков, как из искаженной в стандартной ошибке. Я отправил этот вопрос .

3 голосов
/ 30 ноября 2011

Я бы хотел, чтобы сообщения уровня DEBUG оставались при стандартной ошибке, а сообщения INFO выводились на мой LOG_FILE.

Вы можете установить LOG_LEVEL = 'INFO' insettings.py, но он полностью отключит сообщения DEBUG.

0 голосов
/ 28 марта 2016
scrapy some-scrapy's-args -L 'INFO' -s LOG_FILE=log1.log

выходы будут перенаправлены в файл лога.

...