2017-11-03 5 views
1

私は、ログファイルが1048576バイトを超えないようにしようとしています。 ScrapyはPython loggingモジュールを使用しているので、ScrapyのデフォルトのFileHandlerRotatingFileHandlerに変更しようとしています。Scrapyプロジェクト(または最大サイズ)のRotatingFileHandlerを設定する方法

Scrapyのドキュメントや設定でこれについて何も見つかりませんでした。私の考えは、__init__()スパイダーの方法をオーバーライドすることでした(私は1つのスパイダーを持っています)。

def __init__(self, *a, **kw): 
    self.logger.logger.root.handlers[-1] = RotatingFileHandler('log.log',maxBytes=1024,backupCount=1) 
    super(MainSpider, self).__init__(*a, **kw) 

しかし、スパイダーはスパイダーの初期化前にデータを記録します。

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のデフォルトログファイルの最大サイズを設定する方法はありますか?

答えて

3

https://doc.scrapy.org/en/latest/topics/logging.html#module-scrapy.utils.logに記載されているように、configure_logginginstall_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デフォルト設定どおり;しかし、このハンドラを除去することができる)コンソールにログインします。この方法で、ファイル(複数可)を回転します。

関連する問題