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编码总结(编码类型、格式、转码)
Jul 01 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
python可视化爬虫界面之天气查询
Jul 03 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
Python PO设计模式的具体使用
Aug 16 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
Python基于yield遍历多个可迭代对象
Mar 12 Python
python 自动识别并连接串口的实现
Jan 19 Python
Python数据结构之队列详解
Mar 21 Python
Python  序列化反序列化和异常处理的问题小结
Dec 24 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图片上传类带图片显示
2006/11/25 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
php短址转换实现方法
2015/02/25 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
Yii使用技巧大汇总
2015/12/29 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
深入探讨前端框架react
2015/12/09 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
微信小程序实现animation动画
2018/01/26 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
Python简单定义与使用二叉树示例
2018/05/11 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
对Python _取log的几种方式小结
2019/07/25 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
Python读取实时数据流示例
2019/12/02 Python
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
过滤器的用法
2013/10/08 面试题
初一生物教学反思
2014/01/18 职场文书
期末学生评语大全
2014/04/24 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
师德师风剖析材料
2014/09/30 职场文书
Python max函数中key的用法及原理解析
2021/06/26 Python
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis