【问题标题】:scrapy log handler抓取日志处理程序
【发布时间】:2011-11-30 03:21:25
【问题描述】:

我在以下 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()?它在我的蜘蛛体内吗?

【问题讨论】:

    标签: python screen-scraping scrapy


    【解决方案1】:

    其次,在文档中,它说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 log,这允许你使用你自己的logger。

    我认为你可以在 scrapy 源中复制模块 scrapy/scrapy/log.py,修改它,导入它而不是 scrapy.log 并运行 start() - scrapy 将使用你的日志。其中函数start() 中有一行写着log.startLoggingWithObserver(sflo.emit, setStdout=logstdout)

    制作你自己的观察者 (http://docs.python.org/howto/logging-cookbook.html#logging-to-multiple-destinations) 并在那里使用它。

    【讨论】:

    • 感谢您回答我的第二个问题。但你知道第一个答案吗?
    • @iws,这就是当您同时提出多个问题时会发生的情况。我不能给你第一个问题的广泛答案,但我会尝试 - 查看更新
    【解决方案2】:

    我希望将 DEBUG 级别消息留在标准错误中,并将 INFO 消息转储到我的 LOG_FILE。

    您可以在 settings.py 中设置LOG_LEVEL = 'INFO',但它会完全禁用 DEBUG 消息。

    【讨论】:

      【解决方案3】:

      嗯,

      只是想更新一下,我可以通过使用获取日志文件处理程序来归档

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

      但是我无法让日志显示蜘蛛的名字,就像标准错误中的扭曲一样。我发布了这个question

      【讨论】:

        【解决方案4】:
        scrapy some-scrapy's-args -L 'INFO' -s LOG_FILE=log1.log
        

        输出将被重定向到一个日志文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多