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 相关文章推荐
bpython 功能强大的Python shell
Feb 16 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
pycharm执行python时,填写参数的方法
Oct 29 Python
python-tkinter之按钮的使用,开关方法
Jun 11 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
Python学习之os模块及用法
Jun 03 Python
python框架flask入门之路由及简单实现方法
Jun 07 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
python程序如何进行保存
Jul 03 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 Python
浅析python函数式编程
Sep 26 Python
浅谈Python数学建模之数据导入
Jun 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 strtok()函数的优点分析
2010/03/02 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
vue自定义指令directive实例详解
2018/01/17 Javascript
vue mounted组件的使用
2018/06/18 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
python编码最佳实践之总结
2016/02/14 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
keras打印loss对权重的导数方式
2020/06/10 Python
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
C++面试题:关于链表和指针
2013/06/05 面试题
自我评价优秀范文分享
2013/11/30 职场文书
个人简历中自我评价
2014/02/11 职场文书
巡警年度自我鉴定
2014/02/21 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
从事会计工作年限证明
2015/06/23 职场文书
结婚纪念日感言
2015/08/01 职场文书
运动会广播稿50字
2015/08/19 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书