我已经使用了几个月的scrapy。几周前,我开始使用文件记录日志信息。我写了log-to-file
函数:
def logging_to_file(file_name):
import logging
from scrapy.utils.log import configure_logging
filename = '%s-log.txt' % file_name
import os
if os.path.isfile(filename):
os.remove(filename)
configure_logging(install_root_handler=False)
logging.basicConfig(
filename=filename,
filemode='a',
format='%(levelname)s: %(message)s',
level=logging.DEBUG
)
return logging.getLogger()
然后,在每个scrapy spider类中,我在logger = logging_file.logging_to_file('./logs/xxx-%s' % time.strftime('%y%m%d'))
函数中使用__init__
来自定义日志文件名。
今天出了点问题,我发现如果我在一个.py
文件中编写了两个scrapy类,并且在我启动了第二个类的spider后,日志文件也以第一个类中给出的文件名命名!
我认为这是由python日志规则引起的,但我不知道如何解决。
答案 0 :(得分:1)
我不确定我是否理解您的问题,但一般情况下,您不必创建任何功能或任何内容来配置您的记录器。
您应该创建一个记录器并为其指定FileHandler
,然后使用您创建的记录器记录您的信息。
import logging
logger = logging.getLogger('mylogger') # skip name for global rules
fh = logging.FileHandler(LOG_FILE_DIR, mode='a')
logger.addHandler(fh)
您可以将其放在程序启动时执行的任何位置,例如__init__.py
或其他内容。
现在,当您想要记录某些内容时:
logger = logging.getLogger('mylogger')
logger.error("error happened, oh no!")
可以找到官方Python日志教程here