python使用装饰器作日志处理的方法


Posted in Python onJuly 11, 2019

装饰器这东西我看了一会儿才明白,在函数外面套了一层函数,感觉和java里的aop功能很像;写了2个装饰器日志的例子,

第一个是不带参数的装饰器用法示例,功能相当于给函数包了层异常处理,第二个是带参数的装饰器用法示例,将日志输出到文件。

```
#coding=utf8
import traceback
import logging
from logging.handlers import TimedRotatingFileHandler
def logger(func):
 def inner(*args, **kwargs): #1
 try:
  #print "Arguments were: %s, %s" % (args, kwargs)
  func(*args, **kwargs) #2
 except:
  #print 'error',traceback.format_exc()
  print 'error'
 return inner


def loggerInFile(filename):#带参数的装饰器需要2层装饰器实现,第一层传参数,第二层传函数,每层函数在上一层返回
 def decorator(func):
 def inner(*args, **kwargs): #1
  logFilePath = filename # 日志按日期滚动,保留5天
  logger = logging.getLogger()
  logger.setLevel(logging.INFO)
  handler = TimedRotatingFileHandler(logFilePath,
       when="d",
       interval=1,
       backupCount=5)
  formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
  handler.setFormatter(formatter)
  logger.addHandler(handler)
  try:
  #print "Arguments were: %s, %s" % (args, kwargs)
  result = func(*args, **kwargs) #2
  logger.info(result)
  except:
  logger.error(traceback.format_exc())
 return inner
 return decorator

@logger
def test():
 print 2/0

test()


@loggerInFile('newloglog')
def test2(n):
 print 100/n

test2(10)
test2(0)
print 'end'
```

以上这篇python使用装饰器作日志处理的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python进程管理工具supervisor使用实例
Sep 17 Python
python交互式图形编程实例(一)
Nov 17 Python
Python 元类实例解析
Apr 04 Python
python 编写简单网页服务器的实例
Jun 01 Python
pycharm 在windows上编辑代码用linux执行配置的方法
Oct 27 Python
基于python实现百度翻译功能
May 09 Python
python批量爬取下载抖音视频
Jun 17 Python
Python爬取视频(其实是一篇福利)过程解析
Aug 01 Python
Python实现FLV视频拼接功能
Jan 21 Python
Django获取model中的字段名和字段的verbose_name方式
May 19 Python
python中取整数的几种方法
Nov 07 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 Python
Python日志无延迟实时写入的示例
Jul 11 #Python
深入了解Python iter() 方法的用法
Jul 11 #Python
用python给自己做一款小说阅读器过程详解
Jul 11 #Python
Python 200行代码实现一个滑动验证码过程详解
Jul 11 #Python
ML神器:sklearn的快速使用及入门
Jul 11 #Python
python 随机森林算法及其优化详解
Jul 11 #Python
python实现从本地摄像头和网络摄像头截取图片功能
Jul 11 #Python
You might like
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
Smarty保留变量用法分析
2016/05/23 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
微信小程序 传值取值的几种方法总结
2017/01/16 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
React Native时间转换格式工具类分享
2017/10/24 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
C# .NET面试题
2015/11/28 面试题
为什么要使用servlet
2016/01/17 面试题
市场专员岗位职责
2014/02/14 职场文书
2016年会开场白台词
2015/06/01 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server