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的*args和**kwargs用法
Nov 01 Python
python使用邻接矩阵构造图代码示例
Nov 10 Python
查看django版本的方法分享
May 14 Python
Python 爬取携程所有机票的实例代码
Jun 11 Python
django+mysql的使用示例
Nov 23 Python
Python获取一个用户名的组ID过程解析
Sep 03 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
python实现五子棋程序
Apr 24 Python
python实现扫雷小游戏
Apr 24 Python
Ubuntu16安装Python3.9的实现步骤
Dec 15 Python
pyx文件 生成pyd 文件用于 cython调用的实现
Mar 04 Python
python opencv通过4坐标剪裁图片
Jun 05 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
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
网页的分页下标生成代码(PHP后端方法)
2016/02/03 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
用JavaScript编写COM组件的步骤
2009/03/17 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
Python程序设计入门(1)基本语法简介
2014/06/13 Python
Python的语言类型(详解)
2017/06/24 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
python全栈知识点总结
2019/07/01 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
Python里面如何实现tuple和list的转换
2012/06/13 面试题
食品营养与检测应届生求职信
2013/11/08 职场文书
应届生简历中的自我评价
2014/01/13 职场文书
小学教师岗位职责
2015/04/02 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
Python趣味挑战之实现简易版音乐播放器
2021/05/28 Python
CentOS下安装Jenkins的完整步骤
2022/04/07 Servers
vue使用element-ui按需引入
2022/05/20 Vue.js