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之装饰器、迭代器和生成器
Jul 26 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
python使用pymongo操作mongo的完整步骤
Apr 13 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
Python3基本输入与输出操作实例分析
Feb 14 Python
python+adb命令实现自动刷视频脚本案例
Apr 23 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
Python 虚拟环境工作原理解析
Dec 24 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基础学习笔记
2007/03/18 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
PHP中的Memcache详解
2014/04/05 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
vue实现员工信息录入功能
2020/06/11 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
python修改字典内key对应值的方法
2015/07/11 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
python实战教程之自动扫雷
2018/07/13 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
python向图片里添加文字
2019/11/26 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
奇怪的鱼:Weird Fish
2018/03/18 全球购物
xxx同志考察材料
2014/02/07 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
幼儿园辞职书
2015/02/26 职场文书
2015年体检中心工作总结
2015/05/27 职场文书