#!/usr/bin/env python3
# coding: utf-8
# author: hyh
import logging
import os
import time
from logging import handlers
class GetLogger:
"""单例模式"""
__instance = None
def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
def __init__(self, model_name, log_style='console'):
self.model_name = model_name
self.log_style = log_style
# 设置日志输出格式
log_format = logging.Formatter(
'[%(asctime)s]-[%(levelname)s]-[%(filename)s]-[%(funcName)s:%(lineno)d] : %(message)s')
# 定义一个日志收集器
self.logger = logging.getLogger(self.model_name)
self.logger.setLevel(logging.INFO)
if self.log_style == 'console':
self.console = logging.StreamHandler() # 输出控制台
# self.console.setLevel(logging.INFO) # 设置控制台日志级别
self.console.setFormatter(log_format) # 设置控制台日志格式
self.logger.addHandler(self.console) # 添加handle
else:
all_log_path = '\\pytest_demo\\log\\all_logs\\'
error_log_path = '\\pytest_demo\\log\\error_logs\\'
# 判断要保存的日志文件夹是否存在,不存在就创建
if not os.path.exists(all_log_path):
os.mkdir(all_log_path)
if not os.path.exists(error_log_path):
os.mkdir(error_log_path)
# 设置日志文件名
all_log_name = all_log_path + time.strftime('%Y_%m_%d', time.localtime(time.time())) + '.log'
error_log_name = error_log_path + time.strftime('%Y_%m_%d', time.localtime(time.time())) + '.log'
# 创建一个handle写入所有日志
self.all_log_file = handlers.RotatingFileHandler(all_log_name, maxBytes=5242880, backupCount=3)
self.all_log_file.setLevel(logging.INFO)
# 创建一个handle写入错误日志
self.error_log_file = handlers.RotatingFileHandler(error_log_name)
self.error_log_file.setLevel(logging.ERROR)
# 设置日志输出格式
self.all_log_file.setFormatter(log_format)
self.error_log_file.setFormatter(log_format)
# 添加handle
self.logger.addHandler(self.error_log_file)
self.logger.addHandler(self.all_log_file)
def debug(self, msg):
self.logger.debug(msg=msg)
def info(self, msg):
self.logger.info(msg=msg)
def warn(self, msg):
self.logger.warning(msg=msg)
def error(self, msg):
self.logger.error(msg=msg)
def exception(self, msg):
self.logger.exception(msg=msg)
if __name__ == '__main__':
logger = GetLogger(model_name='test', log_style='file')
logger.info('info')
logger.debug('debug')
logger.error('error')
logger.warn('warn')
logger.exception('exception')