python:logging模块封装(二)

#!/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')


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值