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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
pymongo为mongodb数据库添加索引的方法
May 11 Python
详解python发送各类邮件的主要方法
Dec 22 Python
Python使用matplotlib绘制余弦的散点图示例
Mar 14 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
使用PIL(Python-Imaging)反转图像的颜色方法
Jan 24 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
python字符串替换re.sub()方法解析
Sep 18 Python
Pytorch 实现权重初始化
Dec 31 Python
Pandas之read_csv()读取文件跳过报错行的解决
Apr 21 Python
python中元组的用法整理
Jun 15 Python
python爬虫用scrapy获取影片的实例分析
Nov 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中用数组的方法设置cookies
2011/04/21 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
php实现递归的三种基本方式
2020/07/04 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
javascript代码加载优化方法
2011/01/30 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
JavaScript实现猜数字游戏
2020/05/20 Javascript
vc6编写python扩展的方法分享
2014/01/17 Python
python多进程控制学习小结
2018/10/31 Python
python 实现单例模式的5种方法
2020/09/23 Python
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
印尼网上商店:Alfacart.com
2019/03/11 全球购物
什么是测试驱动开发(TDD)
2012/02/15 面试题
厨师岗位职责
2013/11/12 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
国王的演讲观后感
2015/06/03 职场文书
单位政审意见范文
2015/06/04 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技