scrapy自定义日志
- 自定义日志系统
首先,在Scrapy的settings.py文件中添加以下代码:
LOG_LEVEL = 'DEBUG' # 日志级别
LOG_FILE = '/path/to/logfile.log' # 日志文件路径
LOG_ENABLED = True # 是否启用日志
LOG_STDOUT = False # 是否输出到标准输出
这些设置将指定Scrapy日志的级别,文件路径和是否启用日志。您还可以将日志输出到标准输出或在默认情况下禁用此功能。
接下来,您可以使用Python的built-in logging模块自定义Scrapy日志记录器。以下是一个例子:
import logging
class CustomLogger(object):
def __init__(self):
self.logger = logging.getLogger('scrapy')
self.logger.setLevel(logging.DEBUG)
# 创建一个文件处理程序,将日志记录到文件中
fh = logging.FileHandler('/path/to/logfile.log')
fh.setLevel(logging.DEBUG)
# 创建一个控制台处理程序,将日志记录到控制台上
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# 创建一个日志格式器,用于将记录格式化为字符串
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# 将日志格式器添加到文件和控制台处理程序
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# 将文件和控制台处理程序添加到日志记录器
self.logger.addHandler(fh)
self.logger.addHandler(ch)
def info(self, msg):
self.logger.info(msg)
def debug(self, msg):
self.logger.debug(msg)
def warning(self, msg):
self.logger.warning(msg)
def error(self, msg):
self.logger.error(msg)
def critical(self, msg):
self.logger.critical(msg)
这个自定义日志记录器创建了一个名为“scrapy”的日志记录器,并将日志输出到文件和控制台。还实现了info(),debug(),warning(),error()和critical()方法,以便您可以使用自己的日志记录器记录不同级别的日志信息。
- 保留日志文件并上传报错信息
以下是一个例子,将保留Scrapy日志文件,如果出现报错信息,则将报错信息上传到数据库中:
import logging
import os
import datetime
class CustomLogger(object):
def __init__(self):
self.logger = logging.getLogger('scrapy')
self.logger.setLevel(logging.DEBUG)
# 创建一个文件处理程序,将日志记录到文件中
self.log_file = '/path/to/logfile.log'
fh = logging.FileHandler(self.log_file)
fh.setLevel(logging.DEBUG)
# 创建一个控制台处理程序,将日志记录到控制台上
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# 创建一个日志格式器,用于将记录格式化为字符串
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# 将日志格式器添加到文件和控制台处理程序
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# 将文件和控制台处理程序添加到日志记录器
self.logger.addHandler(fh)
self.logger.addHandler(ch)
def info(self, msg):
self.logger.info(msg)
def debug(self, msg):
self.logger.debug(msg)
def warning(self, msg):
self.logger.warning(msg)
def error(self, msg):
self.logger.error(msg)
# 保留日志文件并上传报错信息
if os.path.exists(self.log_file):
with open(self.log_file, 'r') as f:
log_content = f.read()
project_id = '123456' # 项目ID
error_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 错误时间
error_reason = msg # 错误原因
# 将报错信息上传到数据库中
# db.upload_error(project_id, error_time, error_reason, log_content)
def critical(self, msg):
self.logger.critical(msg)
这个例子只是展示了如何保留Scrapy日志文件,并在出现错误时将错误信息上传到数据库中,如果需要上传报错信息到数据库,您需要根据自己的需求进行相应修改。
希望这个例子对您有所帮助!