python 使用装饰器并记录log的示例代码
1.首先定义一个log文件
#-*-coding:utf-8-*-
importos
importtime
importlogging
importsys
log_dir1=os.path.join(os.path.dirname(os.path.dirname(__file__)),"logs")
today=time.strftime('%Y%m%d',time.localtime(time.time()))
full_path=os.path.join(log_dir1,today)
ifnotos.path.exists(full_path):
os.makedirs(full_path)
log_path=os.path.join(full_path,"facebook.log")
defget_logger():
#获取logger实例,如果参数为空则返回rootlogger
logger=logging.getLogger("facebook")
ifnotlogger.handlers:
#指定logger输出格式
formatter=logging.Formatter('%(asctime)s%(levelname)-8s:%(message)s')
#文件日志
file_handler=logging.FileHandler(log_path,encoding="utf8")
file_handler.setFormatter(formatter)#可以通过setFormatter指定输出格式
#控制台日志
console_handler=logging.StreamHandler(sys.stdout)
console_handler.formatter=formatter#也可以直接给formatter赋值
#为logger添加的日志处理器
logger.addHandler(file_handler)
logger.addHandler(console_handler)
#指定日志的最低输出级别,默认为WARN级别
logger.setLevel(logging.INFO)
#添加下面一句,在记录日志之后移除句柄
returnlogger
2.然后定义一个装饰器文件
在这里引用wraps,一个装饰器的装饰器,目的为了保持引用进来的函数名字不发生变化
#!/usr/bin/envpython
#encoding:utf-8
fromfunctoolsimportwraps
fromlogger.logimportget_logger
importtraceback
defdecoratore(func):
@wraps(func)
deflog(*args,**kwargs):
try:
print("当前运行方法",func.__name__)
returnfunc(*args,**kwargs)
exceptExceptionase:
get_logger().error(f"{func.__name__}iserror,herearedetails:{traceback.format_exc()}")
returnlog
3.在使用的时候直接在函数上面引用即可
@decorator
defstart():
print("666")
以上这篇python使用装饰器并记录log的示例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。