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 相关文章推荐
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
python基于pygame实现响应游戏中事件的方法(附源码)
Nov 11 Python
Python正则表达式分组概念与用法详解
Jun 24 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
学生信息管理系统python版
Oct 17 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
python字符串替换re.sub()方法解析
Sep 18 Python
python使用协程实现并发操作的方法详解
Dec 27 Python
Python-openCV读RGB通道图实例
Jan 17 Python
Python装饰器用法与知识点小结
Mar 09 Python
Python爬虫实现HTTP网络请求多种实现方式
Jun 19 Python
python实现excel公式格式化的示例代码
Dec 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+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
PHP里的中文变量说明
2011/07/23 PHP
色色整理的PHP面试题集锦
2012/03/08 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
javascript 闭包疑问
2010/12/30 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
2019/05/06 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
利用Python演示数型数据结构的教程
2015/04/03 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
简单了解Python中的几种函数
2017/11/03 Python
python 实现list或string按指定分段
2019/12/25 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
小区门卫岗位职责
2013/12/31 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
最经典的商业地产项目广告词
2014/03/13 职场文书
疾病捐款倡议书
2014/05/13 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
防汛通知
2015/04/25 职场文书
红高粱观后感
2015/06/10 职场文书
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android