如何设置Scrapy项目的RotatingFileHandler(或最大尺寸)
问题描述:
我试图确保日志文件不会超过1048576字节。由于Scrapy使用python logging
模块,我试图将Scrapy的默认FileHandler
更改为RotatingFileHandler
。如何设置Scrapy项目的RotatingFileHandler(或最大尺寸)
我在Scrapy文档或设置中找不到关于此的任何内容。我的想法是重写__init__()
蜘蛛的方法(我有一个蜘蛛)。
def __init__(self, *a, **kw):
self.logger.logger.root.handlers[-1] = RotatingFileHandler('log.log',maxBytes=1024,backupCount=1)
super(MainSpider, self).__init__(*a, **kw)
但蜘蛛初始化之前scrapy日志数据。
2017-10-26 13:16:15 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: engine_bot)
2017-10-26 13:16:15 [scrapy.utils.log] INFO: Overridden settings:
....
有没有办法如何使这项工作或设置最大规模的Scrapy默认日志文件?
答
你将不得不在https://doc.scrapy.org/en/latest/topics/logging.html#module-scrapy.utils.log描述调用configure_logging
与install_root_handler=False
。
import logging
from logging.handlers import RotatingFileHandler
from scrapy.utils.log import configure_logging
# Disable default Scrapy log settings.
configure_logging(install_root_handler=False)
# Define your logging settings.
log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
log_level = logging.INFO # Or better yet get `LOG_LEVEL` from settings.
log_file = 'log.log' # Or better yet get `LOG_FILE` from settings.
logging.basicConfig(
format=log_format,
level=log_level
)
rotating_file_log = RotatingFileHandler(log_file, maxBytes=1024, backupCount=1)
rotating_file_log.setFormatter(logging.Formatter(log_format))
root_logger = logging.getLogger()
root_logger.addHandler(rotating_file_log)
这样,您将登录到控制台(按照basicConfig
默认设置;不过,这个处理程序可以被删除)和旋转文件(S)。