2015-05-14 165 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