python封装日志模块,可以输出到控制台和文件

可以调用方法输出日志,也可以用装饰器输出日志,同时防止多次重复输出日志

import logging
import os
import inspect
import time
import inspect
import traceback
from logging.handlers import RotatingFileHandler

class TestLogger:
    current_test = None
    log_level = 'DEBUG'
    _do_log = True
    def __init__(self,args):
        self.arg=args


    def log(info=None,debug=None):
        if debug and TestLogger.log_level == 'DEBUG' or TestLogger.log_level == 'ERROR':
            # 创建Logger对象
            logger = logging.getLogger(__name__)
            # 设置日志等级
            logger.setLevel(logging.DEBUG)
            #判断hanlers是否存在,防止重复写入问题
            if not logger.handlers:
                # 创建控制台输出的Handler
                console_handler = logging.StreamHandler()
                console_handler.setLevel(logging.DEBUG)
                # 创建文件输出的Handler
                # logging.basicConfig(filename='appp.txt', level=logging.INFO,)

                # file_handler = logging.FileHandler('log.txt', encoding='utf-8',maxBytes=1024, backupCount=2)
                #日志记录到文件中,且支持指定日志文件大小,备份文件数量
                file_handler=logging.handlers.RotatingFileHandler('D:/fsdownload/Test/testcases/app_testing/applog/rotating_log.log', encoding='UTF-8', maxBytes=100 * 1024 * 1024, backupCount=2)
                file_handler.setLevel(logging.DEBUG)

                #创建格式化器
                formatter = logging.Formatter(
                    '【日志打印】| %(asctime)s| %(filename)s[line:%(lineno)d]| %(name)s| %(levelname)s| %(message)s')
                # 将格式化器添加到处理器中
                console_handler.setFormatter(formatter)
                file_handler.setFormatter(formatter)

                # 将Handler添加到Logger对象中
                logger.addHandler(console_handler)
                logger.addHandler(file_handler)
            logger.debug(debug)
            return logger

    def __call__(self,func):
        # 创建Logger对象
        logger = logging.getLogger(func.__name__)
        # 设置日志等级
        logger.setLevel(logging.DEBUG)
        # 判断hanlers是否存在,防止重复写入问题
        if not logger.handlers:
            # 创建控制台输出的Handler
            console_handler = logging.StreamHandler()
            console_handler.setLevel(logging.DEBUG)
            # 创建文件输出的Handler
            # logger.setLevel(logging.DEBUG)
            # 日志记录到文件中,且支持指定日志文件大小,备份文件数量
            file_handler = logging.handlers.RotatingFileHandler(
                'D:/fsdownload/Test/testcases/app_testing/applog/rotating_log.log', encoding='UTF-8', maxBytes=100 * 1024 * 1024,
                backupCount=2)
            file_handler.setLevel(logging.DEBUG)
            # 床架你格式化器
            formatter = logging.Formatter(
                '【日志打印】| %(asctime)s| %(filename)s[line:%(lineno)d]| %(name)s| %(levelname)s| %(message)s')
            # 将格式化器添加到处理器中
            console_handler.setFormatter(formatter)
            file_handler.setFormatter(formatter)
            # 将Handler添加到Logger对象中
            logger.addHandler(console_handler)
            logger.addHandler(file_handler)


        def wrapper(*args, **kwargs):
            logger.debug('{}'.format(self.arg))
            result = func(*args, **kwargs)
            # logger.info('Function {} completed'.format(func.__name__))
            return result

        return wrapper


@TestLogger("测试21")
def example_function():
    print("This is an example function.")
    TestLogger.log(debug="测试")
    TestLogger.log(debug="测试1")
    TestLogger.log(debug="测试2")

if __name__=='__main__':
    example_function()

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值