python 使用装饰器并记录log的示例代码


Posted in Python onJuly 12, 2019

1.首先定义一个log文件

# -*- coding: utf-8 -*-
import os
import time
import logging
import sys
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)
if not os.path.exists(full_path):
 os.makedirs(full_path)
log_path=os.path.join(full_path,"facebook.log")
def get_logger():
  # 获取logger实例,如果参数为空则返回root logger
  logger = logging.getLogger("facebook")
  if not logger.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)
  # 添加下面一句,在记录日志之后移除句柄
  return logger

2.然后定义一个装饰器文件

在这里引用wraps,一个装饰器的装饰器,目的为了保持引用进来的函数名字不发生变化

#!/usr/bin/env python 
# encoding: utf-8
from functools import wraps
from logger.log import get_logger
import traceback
def decoratore(func):
 @wraps(func)
 def log(*args,**kwargs):
  try:
   print("当前运行方法",func.__name__)
   return func(*args,**kwargs)
  except Exception as e:
   get_logger().error(f"{func.__name__} is error,here are details:{traceback.format_exc()}")
 return log

3.在使用的时候直接在函数上面引用即可

@decorator
def start():
 print("666")

以上这篇python 使用装饰器并记录log的示例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单的通用表达式求10乘阶示例
Mar 03 Python
python实现获取客户机上指定文件并传输到服务器的方法
Mar 16 Python
Python 的 Socket 编程
Mar 24 Python
探究Python中isalnum()方法的使用
May 18 Python
Python分治法定义与应用实例详解
Jul 28 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
Aug 08 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
python如何写出表白程序
Jun 01 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
Python descriptor(描述符)的实现
Nov 15 Python
浅谈python数据类型及其操作
May 25 Python
Python Matplotlib绘制两个Y轴图像
Apr 13 Python
如何使用python爬虫爬取要登陆的网站
Jul 12 #Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 #Python
python增加图像对比度的方法
Jul 12 #Python
Python 控制终端输出文字的实例
Jul 12 #Python
在Django的View中使用asyncio的方法
Jul 12 #Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 #Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 #Python
You might like
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
实现JavaScript中继承的三种方式
2009/10/16 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
JS重要知识点小结
2011/11/06 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
HTML的select控件美化
2017/03/27 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
使用React-Router实现前端路由鉴权的示例代码
2020/07/26 Javascript
python统计一个文本中重复行数的方法
2014/11/19 Python
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
博士研究生自我鉴定范文
2013/12/04 职场文书
医药代表个人的求职信分享
2013/12/08 职场文书
远程教育心得体会
2014/01/03 职场文书
学校读书活动总结
2014/06/30 职场文书
党员对照检查材料
2014/09/22 职场文书
2015年班组长工作总结
2015/04/10 职场文书
十大最强奥特曼武器:怪兽战斗仪在榜,第五奥特之父只使用过一次
2022/03/18 日漫
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫