2016-07-24 43 views
1

我已經使用scrapy幾個months.Several星期前,我就開始使用的文件記錄到日誌中寫道information.I功能log-to-file,因爲這:如何在scrapy中的每個類中配置記錄器的文件名?

def logging_to_file(file_name): 
import logging 
from scrapy.utils.log import configure_logging 

filename = '%s-log.txt' % file_name 
import os 

if os.path.isfile(filename): 
    os.remove(filename) 
configure_logging(install_root_handler=False) 
logging.basicConfig(
    filename=filename, 
    filemode='a', 
    format='%(levelname)s: %(message)s', 
    level=logging.DEBUG 
) 
return logging.getLogger()  

然後,在每個scrapy蜘蛛類,我用logger = logging_file.logging_to_file('./logs/xxx-%s' % time.strftime('%y%m%d'))__init__函數來自定義日誌文件名稱。
今天發生了一些問題,我發現如果我在一個.py文件中寫了兩個scrapy類,並且在我開始第二個類的蜘蛛之後,日誌文件也由第一個類中給出的文件名命名!
我認爲這是由python日誌規則引起的,但我不知道如何解決。

回答

1

我不確定如果我明白你的問題是什麼,但一般來說你不需要創建任何功能或任何配置你的記錄器。

你應該做什麼創建一個記錄器,併爲其指定一個FileHandler,然後使用你創建的記錄器記錄你的信息。

import logging 
logger = logging.getLogger('mylogger') # skip name for global rules 
fh = logging.FileHandler(LOG_FILE_DIR, mode='a') 
logger.addHandler(fh) 

你可以把這個任何地方大幹快上程序啓動時執行,像__init__.py什麼的。

現在,當你只想記錄的東西:

logger = logging.getLogger('mylogger') 
logger.error("error happened, oh no!") 

Python官方記錄的教程可以發現here

+0

你的答案是有幫助的,謝謝! – nick