我正在尝试向刮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----------')
答案 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 。