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 07 Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 Python
python爬取微信公众号文章的方法
Feb 26 Python
Python数据类型之Number数字操作实例详解
May 08 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
pygame实现非图片按钮效果
Oct 29 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
Java Spring项目国际化(i18n)详细方法与实例
Mar 20 Python
Keras之fit_generator与train_on_batch用法
Jun 17 Python
pandas apply多线程实现代码
Aug 17 Python
浅谈Python 中的复数问题
May 19 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函数
2006/10/09 PHP
针对初学PHP者的疑难问答(2)
2006/10/09 PHP
php mysql数据库操作分页类
2008/06/04 PHP
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
js chrome浏览器判断代码
2010/03/28 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
关于js类的定义
2011/06/28 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
jQuery中extend函数详解
2015/07/13 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
python列表去重的二种方法
2014/02/14 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
用python制作个视频下载器
2021/02/01 Python
营业经理岗位职责
2013/11/10 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
学习型班组申报材料
2014/05/31 职场文书
2014年派出所工作总结
2014/11/21 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
Elasticsearch 索引操作和增删改查
2022/04/19 Python
git stash(储藏)的用法总结
2022/06/25 Servers