import logging
import os
import sys
import logging.handlers
formatter = logging.Formatter('%(asctime)s - %(filename)s [line:%(lineno)d] - %(levelname)s - %(message)s')
class LoggingClass:
def __init__(self, name="mylogger", loglevel="WARNING", save=True, save_level=logging.WARNING, log_path=None,
update_freqency="M", save_interval=1):
self.log_path = log_path # 日志路径
self.name = name # logger得名称在控制台和log文件输出
self.logging = logging
self.loglevel = loglevel # logger得等级控制台只会输出不低于改等级得log
self.log_level = None # 标记位
self.save_level = save_level # 存储日志级别
self.save = save # 是否利用文件句柄处理
self.format = logging.Formatter('%(asctime)s - %(filename)s [line:%(lineno)d] - %(levelname)s - %(message)s')
self.date_format = "%y/%m%d %H:%M%S"
self.save_interval = save_interval # 日志保存间隔
self.update_freqency = update_freqency # 日志更新频率
def init_rotaingfile_handler(self, logfile_name="init_rotaingfile_handler.log"):
fh = self.logging.handlers.RotatingFileHandler(
filename=logfile_name,
mode='a',
maxBytes=300,
backupCount=7,
)
fh.setLevel(self.save_level)
fh.setFormatter(self.format)
return fh
def init_timerotating_handler(self, logfile_name="myLOG.log"):
fh = self.logging.handlers.TimedRotatingFileHandler(
filename=logfile_name,
when=self.update_freqency,
interval=self.save_interval,
backupCount=7
)
fh.setLevel(self.save_level)
fh.setFormatter(self.format)
return fh
def init_streamHd(self):
stream_handler = self.logging.StreamHandler(sys.stdout)
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(self.format)
return stream_handler
def init_fileHd(self, log_file):
file_handler = self.logging.FileHandler(log_file)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(self.format)
return file_handler
def init_logger(self, fh_type="1"):
logger = self.logging.getLogger(__name__)
if self.loglevel == "DEBUG":
self.log_level = self.logging.DEBUG
elif self.loglevel == "INFO":
self.log_level = self.logging.INFO
elif self.loglevel == "WARNING":
self.log_level = self.logging.WARNING
elif self.loglevel == "ERROR":
self.log_level = self.logging.ERROR
logger.setLevel(self.log_level)
if self.save:
log_file = os.path.join(self.log_path , self.name +".log")
print(log_file,">>>>")
if not os.path.exists(self.log_path):
os.makedirs(self.log_path)
if not os.path.exists(log_file):
os.system("echo > %s" % log_file)
if fh_type == "1":
fh = self.init_fileHd(log_file)
logger.addHandler(fh)
elif fh_type == "2":
fh = self.init_streamHd()
logger.addHandler(fh)
elif fh_type == "3":
fh = self.init_rotaingfile_handler()
logger.addHandler(fh)
elif fh_type == "4":
fh = self.init_timerotating_handler()
logger.addHandler(fh)
return logger
if __name__ == '__main__':
logger_t = LoggingClass("the_log", "DEBUG", True, logging.WARNING, "logs").init_logger("1")
logger_t.debug('debug message')
logger_t.info('info message')
logger_t.warning('warn message')
logger_t.error('error message')
logger_t.critical('critical message')