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 2.7.x 和 3.x 版本的重要区别小结
Nov 28 Python
Python实现的检测网站挂马程序
Nov 30 Python
python统计文本字符串里单词出现频率的方法
May 26 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
利用Python操作消息队列RabbitMQ的方法教程
Jul 19 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
和孩子一起学习python之变量命名规则
May 27 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
pandas 空数据处理方法详解
Nov 02 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
python自动化测试之Selenium详解
Mar 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
php数据库备份还原类分享
2014/03/20 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
2017/01/20 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
微信小程序实现左滑动删除效果
2020/03/30 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
Django websocket原理及功能实现代码
2020/11/14 Python
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
恒华伟业笔试面试题
2015/02/26 面试题
社会学专业学生职业规划书
2014/02/07 职场文书
工作表现自我评价
2014/02/08 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
2015年酒店工作总结
2015/04/28 职场文书
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis