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 strip() 函数和 split() 函数的详解及实例
Feb 03 Python
python K近邻算法的kd树实现
Sep 06 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
python实现石头剪刀布程序
Jan 20 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
Django Rest framework频率原理与限制
Jul 26 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
python matplotlib中的subplot函数使用详解
Jan 19 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
python将字典内容写入json文件的实例代码
Aug 12 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
php 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
jQuery设计思想
2017/03/07 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
微信小程序实现左滑动删除效果
2020/03/30 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
django页面跳转问题及注意事项
2019/07/18 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
python中doctest库实例用法
2020/12/31 Python
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
法务专员岗位职责
2014/01/02 职场文书
稽核岗位职责范本
2015/04/13 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python