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 相关文章推荐
python dict remove数组删除(del,pop)
Mar 24 Python
python类继承与子类实例初始化用法分析
Apr 17 Python
python 中random模块的常用方法总结
Jul 08 Python
利用pandas读取中文数据集的方法
Jul 25 Python
Python延时操作实现方法示例
Aug 14 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
使用python实现ftp的文件读写方法
Jul 02 Python
深入了解Python iter() 方法的用法
Jul 11 Python
python实现字符串完美拆分split()的方法
Jul 16 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
Python循环之while无限迭代
Apr 30 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
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
基于jquery实现的鼠标悬停提示案例
2016/12/11 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
Python列表list排列组合操作示例
2018/12/18 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
Python龙贝格法求积分实例
2020/02/29 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
Python的collections模块真的很好用
2021/03/01 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
如何选择使用结构还是类
2014/05/30 面试题
汽车专业毕业生自荐信
2013/11/03 职场文书
品管员岗位职责
2013/11/10 职场文书
《九色鹿》教学反思
2014/02/27 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
小学科学课教学反思
2016/02/23 职场文书