python logger

python 处理日志

import logging
import colorlog
import datetime
from pathlib import Path

"""
Loggers:记录器,提供应用程序代码能直接使用的接口;
Handlers:处理器,将记录器产生的日志发送至目的地;
Filters:过滤器,提供更好的粒度控制,决定哪些日志会被输出;

Formatters:格式化器,设置日志内容的组成结构和消息字段。
        %(name)s Logger的名字
        %(levelno)s 数字形式的日志级别  #日志里面的打印的对象的级别
        %(levelname)s 文本形式的日志级别 #级别的名称
        %(filename)s 调用日志输出函数的模块的文件名
        %(module)s 调用日志输出函数的模块名
        %(funcName)s 调用日志输出函数的函数名
        %(lineno)d 调用日志输出函数的语句所在的代码行
        %(asctime)s 字符串形式的当前时间。默认格式是 “2022-07-20 20:49:45,896”。逗号后面的是毫秒
        %(message)s用户输出的消息
"""

fileName = datetime.datetime.now().strftime('%Y-%m-%d') + '.log'
project_directory = str(Path(__file__).parent.parent) + '/'
log_file = logging.FileHandler(filename=project_directory+'log/'+fileName, encoding='utf8')

class Log(object):
    __logger = None

    # 日志颜色
    log_colors_config = {

        'DEBUG': 'cyan',
        'INFO': 'green',
        'WARNING': 'yellow',
        'ERROR': 'red'
    }

    @classmethod
    def get_logger(cls, file_handler):
        # 创建logger记录器
        cls.__logger = logging.getLogger('test')
        # 控制台处理器
        console_handler = logging.StreamHandler()
        # 日志输出的级别设置
        cls.__logger.setLevel(logging.DEBUG)
        console_handler.setLevel(logging.DEBUG)
        file_handler.setLevel(logging.INFO)
        # 日志文件输出
        file_formatter = logging.Formatter(
            fmt='[%(asctime)s] %(filename)s -> %(funcName)s line:%(lineno)d [%(levelname)s] : %(message)s',
            datefmt='%Y-%m-%d  %H:%M:%S'
        )
        # 控制台输出
        console_formatter = colorlog.ColoredFormatter(
            fmt='%(log_color)s[%(asctime)s] %(filename)s -> %(funcName)s line:%(lineno)d [%(levelname)s] : %(message)s',
            datefmt='%Y-%m-%d %H:%M:%S',
            log_colors=cls.log_colors_config
        )
        console_handler.setFormatter(console_formatter)
        file_handler.setFormatter(file_formatter)

        if not cls.__logger.handlers:
            cls.__logger.addHandler(console_handler)
            cls.__logger.addHandler(file_handler)
        console_handler.close()
        file_handler.close()

        return cls.__logger


# 自定义调用
logger = Log().get_logger(log_file)


if __name__ == '__main__':
    logger.debug('DEBUG 日志')
    logger.info('INFO 日志')
    logger.warning('WARNING 日志')
    logger.error('ERROR 日志')

posted @ 2022-07-20 23:53  tt_贝塔  阅读(92)  评论(0编辑  收藏  举报