9

これを行うことで、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

これにより、すべての log.INFO データと log.ERROR が に保存されspider.logます。

エラーが発生した場合は、それらの詳細を という別のログ ファイルにも保存したいと思いますspider_errors.logspider.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"

4

1 に答える 1

11

ロギングに仕事をさせてください。PythonLoggingObserverの代わりに使用してみてくださいDefaultObserver:

  • 2 つのロガー (1 つはメッセージ用INFO、もう 1 つはERRORメッセージ用) を Python で直接、または 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()
    

ロガーの設定についてサポートが必要な場合はお知らせください。

編集:

もう 1 つのオプションは、次の 2 つのファイル ログ オブザーバーを開始することです__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)

    ...
于 2013-04-18T20:31:40.200 に答える