两次崎cra地记录日志

时间:2020-05-15 09:10:41

标签: python logging scrapy python-logging

我正在尝试向刮scrap的蜘蛛日志中添加另一条信息。我需要添加的信息可以在 init 方法中进行访问:

def __init__(self, target: str, days_ago: int = 1):
    self.target = target  # -----here----
    self.now = datetime.now()
    self.days_ago = days_ago

我试图像这样覆盖scrapy.Spider logger属性:

@property
def logger(self):
    logger = logging.getLogger(self.name)
    formatter = logging.Formatter('%(asctime)s [%(name)s] [%(target)s] [%(levelname)s] %(message)s')
    out_handler = logging.StreamHandler()
    out_handler.setFormatter(formatter)
    logger.addHandler(out_handler)
    extra = {'target': self.target, 'spider': self}
    return logging.LoggerAdapter(logger, extra)

结果如预期:

2020-05-15 12:05:09,536 [spiderName] [spiderTarget] [INFO] Log test etc----------

但是日志的原始格式增加了一倍:

2020-05-15 12:05:09 [spiderName] INFO: Log test etc----------

我已经检查过,打印logging.getLogger(self.name).handlers时只有一个处理程序。

我只需要在日志中添加一个额外的信息,而不必使每个日志条目都加倍。

PS:记录器调用看起来像这样:

def start_requests(self):
    self.logger.info('Log test etc----------')

1 个答案:

答案 0 :(得分:0)

我最终如何解决它,可能会在某些时候帮助某人:

def adjust_logging(self):
    formatter = logging.Formatter('%(asctime)s [%(name)s] [{target}] [%(levelname)s] %(message)s'.format(target=self.target))
    root_logger = logging.getLogger()
    handler = root_logger.handlers[1]
    handler.setFormatter(formatter)

并在刮call蜘蛛中进行调用 init