2015-05-14 164 views
1

我想將日誌文件輸出到python中的日誌文件夾中。如何在python日誌中創建日誌文件夾

我可以通過當前日期在「../myapp/logs/20150514/xx.log」這樣的hander中創建日誌路徑。 但問題是日誌更改時日誌路徑不會更改。

我創建日誌實例,而我開始我的長期運行 python腳本xx.py,現在實例的日誌路徑是「../myapp/logs/20150514/xx.log」。但在明天,因爲實例沒有改變,所以它的路徑仍然是「../myapp/logs/20150514/xx.log」,它應該是「../myapp/logs/20150515/xx.log」。

如何使日誌輸出到日常文件夾?

我得到日誌實例代碼:

import os 
import utils 
import logging 
from logging.handlers import RotatingFileHandler 
import datetime 

def getInstance(file=None): 
    global logMap 
    if file is None: 
     file = 'other/default.log' 
    else: 
     file = file + '.log' 
    if(logMap.has_key(file)): 
     return logMap.get(file) 
    else: 
     visit_date = datetime.date.today().strftime('%Y-%m-%d') 
     date_file = os.path.join(visit_date,file) 
     log_path = utils.read_from_ini('log_path').strip() 
     log_path = os.path.join(log_path,date_file); 
     if not os.path.isdir(os.path.dirname(log_path)): 
      os.makedirs(os.path.dirname(log_path)) 
     logging.basicConfig(datefmt='%Y-%m-%d %H:%M:%S',level=logging.INFO) 
     log_format = '[%(asctime)s][%(levelname)s]%(filename)s==> %(message)s' 
     formatter = logging.Formatter(log_format) 
     log_file = RotatingFileHandler(log_path, maxBytes=10*1024*1024,backupCount=5) 
     log_file.setLevel(logging.INFO) 
     log_file.setFormatter(formatter) 
     instance = logging.getLogger(file) 
     instance.addHandler(log_file) 
     logMap[file] = instance 
     return instance 

回答

1

RotatingFileHandler沒有一個時間的基礎上旋轉,而是一個尺寸的基礎上。這就是maxBytes的論點。如果您想要根據時間進行旋轉,請改用TimedRotatingFileHandler。請注意,這適用於文件名,但不適用於路徑(據我所知)。您可以擁有20150505.log,20150506.log,但不能包含20150505/mylog.log,20150506/mylog.log。

如果你想旋轉文件夾名稱,你可以通過繼承TimedRotatingFileHandler並添加自己的邏輯來完成。

+0

是的,TimedRotatingFileHandler只適用於文件名。如果沒有其他優美的解決方案,我會考慮創建它的子類。非常感謝。 – JackYe