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函数中的默认参数
Mar 30 Python
Python线程的两种编程方式
Apr 14 Python
理解Python垃圾回收机制
Feb 12 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
Python imread、newaxis用法详解
Nov 04 Python
tensorflow 环境变量设置方式
Feb 06 Python
Python接口测试结果集实现封装比较
May 01 Python
什么是Python中的匿名函数
Jun 02 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
Mar 03 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一些常用的正则表达式字符的一些转换
2008/07/29 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
php curl 上传文件代码实例
2015/04/27 PHP
php获取系统变量方法小结
2015/05/29 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
2016/07/28 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
node中的session的具体使用
2018/09/14 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
Python编程入门的一些基本知识
2015/05/13 Python
python生成器generator用法实例分析
2015/06/04 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
大学学习生活感言
2014/01/18 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
积极向上的团队口号
2014/06/06 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
教师年终个人总结
2015/02/11 职场文书
售票员岗位职责
2015/02/15 职场文书
2016年教师新年寄语
2015/08/18 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js
Python中re模块的元字符使用小结
2022/04/07 Python