日志封装
# -*- coding: utf-8 -*-
import os
import logging
import colorlog # 控制台日志输入颜色
from logging.handlers import RotatingFileHandler # 按文件大小滚动备份
# 控制台日志输出颜色
log_colors_config = {
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'bold_red',
}
class LoggerHandler:
# 日志等级
_logger_level = {
'debug': 'DEBUG',
'info': 'INFO',
'warning': 'WARNING',
'error': 'ERROR',
'critical': 'CRITICAL'
}
def __init__(self, file_name, logger_level, stream_level='info',
file_level='warning'):
self.file_name = file_name
self.logger_level = self._logger_level.get(logger_level, 'debug')
self.stream_level = self._logger_level.get(stream_level, 'info')
self.file_level = self._logger_level.get(file_level, 'warning')
# 创建日志对象
self.logger = logging.getLogger()
# 设置日志级别
self.logger.setLevel(self.logger_level)
if not self.logger.handlers:
# 设置日志输出流
f_stream = logging.StreamHandler()
# 创建一个FileHandler,用于写到本地
# 使用RotatingFileHandler类,滚动备份日志
f_file = RotatingFileHandler("E:\APItest\logs\log.log", mode='a',
maxBytes=1024 * 1024 * 5, backupCount=5,
encoding='utf-8')
# 设置输出流级别
f_stream.setLevel(self.stream_level)
f_file.setLevel(self.file_level)
# 设置日志输出格式
self.formatter = colorlog.ColoredFormatter(
'%(log_color)s[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s',
log_colors=log_colors_config)
f_stream.setFormatter(self.formatter)
f_file.setFormatter(self.formatter)
self.logger.addHandler(f_stream)
self.logger.addHandler(f_file)
@property
def get_logger(self):
return self.logger
def logger():
if not os.path.exists("E:\APItest\logs"):
os.mkdir("E:\APItest\logs")
return LoggerHandler(
logger_level='debug',
file_name="E:\APItest\logs\log.txt",
stream_level='debug',
file_level='info'
).get_logger
if __name__ == "__main__":
logger().debug('debug')
logger().info('info')
logger().warning('warning')
logger().error('error')
logger().critical('critical')