我正在使用scrapy,在我的scrapy项目中,我创建了几个spider类,正如官方文档所说,我用这种方式指定日志文件名:
def logging_to_file(file_name):
"""
@rtype: logging
@type file_name:str
@param file_name:
@return:
"""
import logging
from scrapy.utils.log import configure_logging
configure_logging(install_root_handler=False)
logging.basicConfig(
filename=filename+'.txt',
filemode='a',
format='%(levelname)s: %(message)s',
level=logging.DEBUG,
)
Class Spider_One(scrapy.Spider):
name='xxx1'
logging_to_file(name)
......
Class Spider_Two(scrapy.Spider):
name='xxx2'
logging_to_file(name)
......
现在,如果我开始Spider_One
,一切都是正确的!但是,如果我开始Spider Two
,Spider Two
的日志文件也会以Spider One
的名称命名}!
我从谷歌和stackoverflow搜索了很多答案,但遗憾的是,没有一个工作!
我正在使用python 2.7& scrapy 1.1!
希望有人能帮助我!
答案 0 :(得分:1)
这是因为每次加载包裹时都会启动logging_to_file
。您在这里使用的是一个类变量,您应该使用实例变量。
当你的包或模块加载python时,会加载每个类等等。
class MyClass:
# everything you do here is loaded everytime when package is loaded
name = 'something'
def __init__(self):
# everything you do here is loaded ONLY when the object is created
# using this class
要解决您的问题,只需将logging_to_file
函数调用移至您的蜘蛛__init__()
方法。
class MyClass(Spider):
name = 'xx1'
def __init__(self):
super(MyClass, self).__init__()
logging_to_file(self.name)