通过这样做我正在运行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"
答案 0 :(得分:10)
让logging完成这项工作。尝试使用PythonLoggingObserver
代替DefaultObserver
:
INFO
,一个用于ERROR
消息)(参见docs)在蜘蛛的__init__
:
def __init__(self, name=None, **kwargs):
# TODO: configure logging: e.g. 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)
...