繁体   English   中英

在scrapy中记录到特定的错误日志文件

[英]Logging to specific error log file in 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

这会将所有log.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"

日志记录完成工作。 尝试使用PythonLoggingObserver而不是DefaultObserver

  • 直接在python中,或通过fileconfig,或通过dictconfig配置两个记录器(一个用于INFO ,一个用于ERROR消息)(参见docs
  • 在spider的__init__启动它:

     def __init__(self, name=None, **kwargs): # TODO: configure logging: eg 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)

    ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM