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 列表排序方法reverse、sort、sorted详解
Jan 22 Python
基于数据归一化以及Python实现方式
Jul 11 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
python修改txt文件中的某一项方法
Dec 29 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
python实现机器人卡牌
Oct 06 Python
python爬虫爬取幽默笑话网站
Oct 24 Python
python3连接MySQL8.0的两种方式
Feb 17 Python
python生成任意频率正弦波方式
Feb 25 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
May 10 Python
Python把图片转化为pdf代码实例
Jul 28 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 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 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
javascript 对象定义方法 简单易学
2009/03/22 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
jQuery 表格工具集
2010/04/25 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
2017/02/02 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
PyTorch中permute的用法详解
2019/12/30 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
Lucene推荐的分页方式是什么?
2015/12/07 面试题
文员自我评价怎么写
2013/09/19 职场文书
公务员保密承诺书
2014/03/27 职场文书
2014年导购员工作总结
2014/11/18 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
节约用电通知
2015/04/25 职场文书