如何在python日志中创建每日日志文件夹
我想将日志文件输出到python中的daily文件夹中 我可以通过当前日期在hander中创建“./myapp/logs/20150514/xx.log”这样的日志路径。 但问题是日志路径在日期更改时不会更改 我在启动长时间运行的python脚本xx.py时创建了日志实例,现在实例的日志路径是“./myapp/logs/20150514/xx.log”。但是在明天,由于实例没有改变,所以它的路径仍然是“./myapp/logs/20150514/xx.log”,应该是“./myapp/logs/20150515/xx.log” 如何将日志输出到每日文件夹中 我的获取日志实例代码:如何在python日志中创建每日日志文件夹,python,logging,Python,Logging,我想将日志文件输出到python中的daily文件夹中 我可以通过当前日期在hander中创建“./myapp/logs/20150514/xx.log”这样的日志路径。 但问题是日志路径在日期更改时不会更改 我在启动长时间运行的python脚本xx.py时创建了日志实例,现在实例的日志路径是“./myapp/logs/20150514/xx.log”。但是在明天,由于实例没有改变,所以它的路径仍然是“./myapp/logs/20150514/xx.log”,应该是“./myapp/logs/
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
您的
RotatingFileHandler
不是按时间旋转,而是按大小旋转。这就是maxBytes
参数的作用。如果要基于时间进行旋转,请改用TimedRotatingFileHandler
。请注意,这适用于文件名,但不适用于路径(据我所知)。您可以使用20150505.log、20150506.log,但不能使用20150505/mylog.log、20150506/mylog.log
如果您想旋转文件夹名称,您可以通过子类化TimedRotatingFileHandler并添加您自己的逻辑来实现。是的,TimedRotatingFileHandler仅适用于文件名。如果没有其他优美的解决方案,我将考虑创建它的子类。谢谢。