本文实例讲述了Python使用修饰器进行异常日志记录操作。分享给大家供大家参考,具体如下:
当脚本中需要进行的的相同的异常操作很多的时候,可以用修饰器来简化代码。比如我需要记录抛出的异常:
在log_exception.py文件中,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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文件中:
1
2
3
4
5
6
|
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程序设计有所帮助。
原文链接:https://www.cnblogs.com/arkenstone/p/7901065.html