python 动态增加logger handler

来源:互联网 发布:淘宝企业店铺审核时间 编辑:程序博客网 时间:2024/06/07 20:15

需求:

针对不同的项目按照年月生成不同的日志目录。

import os,datetime,logging,logging.configfrom core.config.config_log import *from core.kernel.exception import *class Log:def __init__(self):logging.config.dictConfig(LOG_CONFIG)self.logger = logging.getLogger("system")def get_logger(self):return self.loggerdef create_handler(self,level,file_name):handler = logging.handlers.RotatingFileHandler(file_name,"a", maxBytes=0, backupCount=0, delay=False)handler.setLevel(level)handler.setFormatter(logging.Formatter(LOG_CONFIG["formatters"]["standard"]["format"]))return handlerdef create_filter(self):passdef create_project_logger(self,project=None):if project:direct =LOG_PATH + project + "/" + str(TODAY_TIME.year) + "/" + str(TODAY_TIME.month) if not os.path.exists(direct):self.logger.info("创建文件夹,directName: %s",direct)os.makedirs(direct)if not os.path.exists(direct):self.logger.error("创建文件夹失败,directName %s",direct)raise MyException(-1,"创建日志文件夹失败")self.logger.addHandler(self.create_handler(logging.INFO,direct+"/info_" +str(datetime.datetime.now().date())+".log"))self.logger.addHandler(self.create_handler(logging.ERROR,direct+"/error_" +str(datetime.datetime.now().date())+".log"))# not workself.logger.removeHandler(self.create_handler(logging.INFO,LOG_PATH + "/system.log"))return self.loggerLOG = Log().get_logger()




配置文件:config_log.py

import datetimeLOG_PATH = './log/'TODAY_TIME = datetime.datetime.now()LOG_CONFIG = {    'version': 1,    'disable_existing_loggers': False,    'formatters': {        'standard': {            'format': '[%(asctime)s][%(levelname)s]-%(message)s'         }    },    'filters': {    },    'handlers': {        'system': {            'level':'INFO',            'class':'logging.handlers.RotatingFileHandler',            'filename':  LOG_PATH + "/system.log",             'maxBytes': 1024*1024*5, # 5 MB            'backupCount': 5,            'formatter':'standard',             'mode':'a',        },        'console':{            'level': 'INFO',            'class': 'logging.StreamHandler',            'formatter': 'standard'        },    },    'loggers': {        'system':{            'handlers': ['system','console'],            'level':"INFO",            'propagate': False                 },    }}          


说明:当没有项目时,使用日志配置文件的system。有项目时,动态生成对应infohandler,添加到logger中去。







0 0
原创粉丝点击