Python使用修饰器进行异常日志记录操作示例


Posted in Python onMarch 19, 2019

本文实例讲述了Python使用修饰器进行异常日志记录操作。分享给大家供大家参考,具体如下:

当脚本中需要进行的的相同的异常操作很多的时候,可以用修饰器来简化代码。比如我需要记录抛出的异常:

在log_exception.py文件中,

import functools
import logging
def create_logger():
  logger = logging.getLogger("test_log")
  logger.setLevel(logging.INFO)
  fh = logging.FileHandler("test.log")
  fmt = "[%(asctime)s-%(name)s-%(levelname)s]: %(message)s"
  formatter = logging.Formatter(fmt)
  fh.setFormatter(formatter)
  logger.addHandler(fh) 
  return logger
def log_exception(fn):
  @functools.wraps(fn)
  def wrapper(*args, **kwargs):
    logger = create_logger()
    try:
      fn(*args, **kwargs)
    except Exception as e:
      logger.exception("[Error in {}] msg: {}".format(__name__, str(e)))
      raise
  return wrapper

在test.py文件中:

from log_exception import log_exception
@log_exception
def reciprocal(x):
  return 1/x
if __name__ == "__main__":
  reciprocal(0)

在test.log文件中可以看到以下错误信息:

[2017-11-26 23:37:41,012-test_log-ERROR]: [Error in __main__] msg: integer division or modulo by zero
Traceback (most recent call last):
  File "<ipython-input-43-cfa2d18586a3>", line 16, in wrapper
    fn(*args, **kwargs)
  File "<ipython-input-46-37aa8ff0ba48>", line 3, in reciprocal
    return 1/x
ZeroDivisionError: integer division or modulo by zero

参考:

1. https://wiki.python.org/moin/PythonDecorators
2. https://www.blog.pythonlibrary.org/2016/06/09/python-how-to-create-an-exception-logging-decorator/

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python根据经纬度计算距离示例
Feb 16 Python
python+pyqt实现右下角弹出框
Oct 26 Python
python docx 中文字体设置的操作方法
May 08 Python
Python使用add_subplot与subplot画子图操作示例
Jun 01 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
python如何判断IP地址合法性
Apr 05 Python
Python正则表达式高级使用方法汇总
Jun 18 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
python学生管理系统学习笔记
Mar 19 #Python
Python操作rabbitMQ的示例代码
Mar 19 #Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 #Python
浅谈python中get pass用法
Mar 19 #Python
使用matplotlib中scatter方法画散点图
Mar 19 #Python
详解django+django-celery+celery的整合实战
Mar 19 #Python
详解Python正则表达式re模块
Mar 19 #Python
You might like
PHP insert语法详解
2008/06/07 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
javascript计算对象长度的方法
2017/10/25 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
python计算最大优先级队列实例
2013/12/18 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
django中模板的html自动转意方法
2018/05/27 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
行政助理的职责
2013/11/14 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
施工安全责任书范本
2014/07/24 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
Vue+Flask实现图片传输功能
2022/04/01 Vue.js