如何在scrapy中为每个类配置logger的文件名?

时间:2016-07-24 19:37:49

标签: python logging scrapy

我已经使用了几个月的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日志规则引起的,但我不知道如何解决。

1 个答案:

答案 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