可以调用方法输出日志,也可以用装饰器输出日志,同时防止多次重复输出日志
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()