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之再深点,更懂list
Sep 20 Python
在Python中使用mechanize模块模拟浏览器功能
May 05 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
Python爬取当当、京东、亚马逊图书信息代码实例
Dec 09 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
PyCharm设置每行最大长度限制的方法
Jan 16 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
Python2与Python3的区别实例总结
Apr 17 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
Jun 13 Python
python实现信号时域统计特征提取代码
Feb 26 Python
Python pandas对excel的操作实现示例
Jul 21 Python
python在package下继续嵌套一个package
Apr 14 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生成Gif图片验证码
2013/10/27 PHP
php 强制下载文件实现代码
2013/10/28 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
vue中element组件样式修改无效的解决方法
2018/02/03 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python检测网站链接是否已存在
2016/04/07 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
Python中反射和描述器总结
2018/09/23 Python
一百多行python代码实现抢票助手
2018/09/25 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
倩碧英国官网:Clinique英国
2018/08/10 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
Ibatis如何使用动态表名
2015/07/12 面试题
书香校园建设方案
2014/05/02 职场文书
团结演讲稿范文
2014/05/23 职场文书
承诺书格式范文
2014/06/03 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
检讨书格式
2015/01/23 职场文书
英文导游词
2015/02/13 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书