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 strip()函数 介绍
May 24 Python
python使用循环实现批量创建文件夹示例
Mar 25 Python
全面解读Python Web开发框架Django
Jun 30 Python
python递归计算N!的方法
May 05 Python
Python类属性与实例属性用法分析
May 09 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
python决策树之C4.5算法详解
Dec 20 Python
python使用xpath中遇到:到底是什么?
Jan 04 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
Jan 17 Python
python统计指定目录内文件的代码行数
Sep 19 Python
学会python自动收发邮件 代替你问候女友
May 20 Python
anaconda python3.8安装后降级
Jun 11 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 常用函数库和一些实用小技巧
2009/01/01 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
php中文验证码实现方法
2015/06/18 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
django创建自定义模板处理器的实例详解
2017/08/14 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
python中subprocess批量执行linux命令
2018/04/27 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
幼儿园校车司机的岗位职责
2014/01/30 职场文书
市场营销求职信范文
2014/02/21 职场文书
80后职场人的职业生涯规划
2014/03/08 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
委托证明范本
2014/11/25 职场文书
汽车销售员岗位职责
2015/04/11 职场文书