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单元测试框架unittest使用方法讲解
Apr 13 Python
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
python实现校园网自动登录的示例讲解
Apr 22 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
TensorFlow实现卷积神经网络
May 24 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
python Polars库的使用简介
Apr 21 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
截获网站title标签之家内容的例子
2006/10/09 PHP
php中的strpos使用示例
2014/02/27 PHP
php微信开发之谷歌测距
2018/06/14 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
以一段代码为实例快速入门Python2.7
2015/03/31 Python
详解Django的model查询操作与查询性能优化
2018/10/16 Python
学Python 3的理由和必要性
2019/11/19 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
老师对学生的寄语
2014/04/09 职场文书
ktv筹备计划书
2014/05/03 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
公司离职证明标准格式
2014/11/18 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫
Python数组变形的几种实现方法
2022/05/30 Python