Python日志输出不同颜色字体并打印到日志文件

python日志封装,可以在控制台输出不同颜色的字体,并且把日志输入到文件中存储

控制台展示样式:

Python日志输出不同颜色字体并打印到日志文件_第1张图片

log日志样式:

# -*- coding:utf-8 -*-
# @Author:山东少年先锋队
# 2020.05.27
import logging
import colorlog
# from ShanDdong.ShanDdongShaoXianDui_API.common.DataPaths import LogsPath
# 上面这行如果你把路径打包的话可以这样想,下面的相对路径可以省略

# 设置相对路径
ProjectPath = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]
LogsPath = os.path.join(ProjectPath,  'logs\yourprodect_{0}'.format(time.strftime('%Y-%m-%d_%H-%M-%S',time.localtime())))

# 设置控制台打印的颜色
log_colors_config = {
    'DEBUG': 'cyan',
    'INFO': 'black',
    'WARNING': 'yellow',
    'ERROR': 'red',
    'CRITICAL': 'red',
}


class MyLogs:
    """
    在其他文件调用方法
    1. from . import MyLogs  把这个文件导入
    2. self.log = MyLogs()  实例化类
    3. self.log.info("想要打印到日志的话")  这个分五个等级
        self.log.error("错误日志")
        self.log.info('正常日志信息')
        ......
     4. 使用两个格式,格式一打印到控制台,格式二打印到日志(使用格式一打印因为颜色会出现[30m日志[0m)   

    """

    def mylog(self, level, msg):
        logger = logging.getLogger('GuangDian_API')
        logger.setLevel(logging.DEBUG)
        formatter = colorlog.ColoredFormatter(
            '%(log_color)s[%(asctime)s] [%(name)s] [%(levelname)s]: %(message)s',
            log_colors=log_colors_config)
        formatter2 = logging.Formatter('[%(asctime)s] [%(name)s] [%(levelname)s]: %(message)s')
        sh = logging.StreamHandler()  # 输出到控制台
        sh.setLevel(logging.DEBUG)
        sh.setFormatter(formatter)  # 指定格式

        fh = logging.FileHandler(LogsPath, encoding="utf-8")
        fh.setLevel(logging.DEBUG)
        fh.setFormatter(formatter2)
        logger.addHandler(sh)
        logger.addHandler(fh)  # 输出到文件

        if level == "DEBUG":
            logger.debug(msg)
        elif level == "INFO":
            logger.info(msg)
        elif level == "WARNING":
            logger.warning(msg)
        elif level == "ERROR":
            logger.error(msg)
        elif level == "CRITICAL":
            logger.critical(msg)
        logger.removeHandler(sh)
        logger.removeHandler(fh)
        fh.close() #不关闭会警告

    def debug(self, msg):
        self.mylog("DEBUG", msg)

    def info(self, msg):
        self.mylog("INFO", msg)

    def warning(self, msg):
        self.mylog("WARNING", msg)

    def error(self, msg):
        self.mylog("ERROR", msg)

    def critical(self, msg):
        self.mylog("CRITICAL", msg)


if __name__ == '__main__':
    log = MyLogs()
    log.debug("---测试开始----")
    log.info("操作步骤")
    log.warning("----测试结束----")
    log.error("----测试错误----")

你可能感兴趣的:(Python日志输出不同颜色字体并打印到日志文件)