python中设置log

1、设置log的demo

import logging
import logging.handlers
import os.path

class Logger(logging.getLoggerClass()):
    def __init__(self, name, console=True, file_path=None, debug=False):
        self.handlers = []
        self.disabled = False
        self.name = name
        self.filters = []
        self.propagate = False
        if debug:
            self.level = logging.DEBUG
        else:
            self.level = logging.INFO
        self._set_file(file_path)
        self._set_handler(console)

    @property
    def rtHandler(self):
        Rthandler = logging.handlers.RotatingFileHandler(
            self.file_path, maxBytes=10 * 1024 * 1024, backupCount=5)
        Rthandler.setLevel(logging.DEBUG)
        formatter = logging.Formatter(
            fmt='%(asctime)s %(process)d %(levelname)-8s %(pathname)s-%(lineno)s : %(message)s',
            datefmt='%y-%m-%d %H:%M:%S')
        Rthandler.setFormatter(formatter)
        return Rthandler

    @property
    def consoleHandler(self):
        console = ColorHandler()
        console.setLevel(logging.DEBUG)
        formatter = logging.Formatter(
            fmt='%(asctime)s|%(name)s|%(process)d|%(colorBegin)s%(levelname)-8s%(colorEnd)s|%(message)s',
            datefmt='%H:%M:%S')
        console.setFormatter(formatter)
        return console

    def _set_handler(self, console):
        self.addHandler(self.rtHandler)
        if console:
            self.addHandler(self.consoleHandler)

    def _set_file(self, file_path):
        file_name = "{}.log".format(self.name)
        dir_path = os.path.abspath(os.path.curdir)
        if file_path:
            if os.path.isfile(file_path):
                self.file_path = file_path
                return
            if os.path.isdir(file_path):
                dir_path = os.path.abspath(file_path)
            else:
                if os.path.sep in file_path:
                    p, n = os.path.split(file_path)
                else:
                    p, n = dir_path, file_path
                dir_path = os.path.abspath(p)
                if n.endswith('.log'):
                    file_name = n
                else:
                    file_name = "{}.log".format(n)
        self.file_path = os.path.join(dir_path, file_name)


class ColorHandler(logging.StreamHandler):
    LEVEL_COLORS = {
        logging.DEBUG: '\033[00;32m',  # GREEN
        logging.INFO: '\033[00;36m',  # CYAN
        # logging.AUDIT: '\033[01;36m',  # BOLD CYAN
        logging.WARN: '\033[01;33m',  # BOLD YELLOW
        logging.ERROR: '\033[01;31m',  # BOLD RED
        logging.CRITICAL: '\033[01;31m',  # BOLD RED
    }

    def format(self, record):
        record.colorBegin = self.LEVEL_COLORS[record.levelno]
        record.colorEnd = "\033[0m"
        return logging.StreamHandler.format(self, record)


cache = {}

def getLogger(name='default', console=True, file_path=None, debug=False):
    if name not in cache:
        cache[name] = Logger(name=name, console=console, file_path=file_path, debug=debug)
    return cache[name]


def main():
    LOG = getLogger(name='test', file_path='testLog', debug=True)
    LOG.debug("this is a debug")
    LOG.info("this is a info")
    LOG.warn("this is a warn")
    LOG.error("this is a error")
    LOG.critical("this is a critical")


if __name__ == '__main__':
    main()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值