python 使用装饰器并记录log的示例代码


Posted in Python onJuly 12, 2019

1.首先定义一个log文件

# -*- coding: utf-8 -*-
import os
import time
import logging
import sys
log_dir1=os.path.join(os.path.dirname(os.path.dirname(__file__)),"logs")
today = time.strftime('%Y%m%d', time.localtime(time.time()))
full_path=os.path.join(log_dir1,today)
if not os.path.exists(full_path):
 os.makedirs(full_path)
log_path=os.path.join(full_path,"facebook.log")
def get_logger():
  # 获取logger实例,如果参数为空则返回root logger
  logger = logging.getLogger("facebook")
  if not logger.handlers:
   # 指定logger输出格式
   formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')
 
   # 文件日志
   file_handler = logging.FileHandler(log_path,encoding="utf8")
   file_handler.setFormatter(formatter) # 可以通过setFormatter指定输出格式
 
   # 控制台日志
   console_handler = logging.StreamHandler(sys.stdout)
   console_handler.formatter = formatter # 也可以直接给formatter赋值
 
   # 为logger添加的日志处理器
   logger.addHandler(file_handler)
   logger.addHandler(console_handler)
 
   # 指定日志的最低输出级别,默认为WARN级别
   logger.setLevel(logging.INFO)
  # 添加下面一句,在记录日志之后移除句柄
  return logger

2.然后定义一个装饰器文件

在这里引用wraps,一个装饰器的装饰器,目的为了保持引用进来的函数名字不发生变化

#!/usr/bin/env python 
# encoding: utf-8
from functools import wraps
from logger.log import get_logger
import traceback
def decoratore(func):
 @wraps(func)
 def log(*args,**kwargs):
  try:
   print("当前运行方法",func.__name__)
   return func(*args,**kwargs)
  except Exception as e:
   get_logger().error(f"{func.__name__} is error,here are details:{traceback.format_exc()}")
 return log

3.在使用的时候直接在函数上面引用即可

@decorator
def start():
 print("666")

以上这篇python 使用装饰器并记录log的示例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python数据类型判断type与isinstance的区别实例解析
Oct 31 Python
tensorflow更改变量的值实例
Jul 30 Python
python远程连接MySQL数据库
Apr 19 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
Python编程快速上手——PDF文件操作案例分析
Feb 28 Python
Python如何使用队列方式实现多线程爬虫
May 12 Python
django ORM之values和annotate使用详解
May 19 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 Python
无惧面试,带你搞懂python 装饰器
Aug 17 Python
通过实例解析Python文件操作实现步骤
Sep 21 Python
python时间time模块处理大全
Oct 25 Python
python 爬取豆瓣网页的示例
Apr 13 Python
如何使用python爬虫爬取要登陆的网站
Jul 12 #Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 #Python
python增加图像对比度的方法
Jul 12 #Python
Python 控制终端输出文字的实例
Jul 12 #Python
在Django的View中使用asyncio的方法
Jul 12 #Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 #Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 #Python
You might like
认识并使用PHP超级全局变量
2010/01/26 PHP
php echo 输出字符串函数详解
2010/05/13 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
JS重要知识点小结
2011/11/06 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
JS实现数组深拷贝的方法分析
2019/03/06 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python set常用操作函数集锦
2017/11/15 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
Python中turtle库的使用实例
2019/09/09 Python
什么是python的id函数
2020/06/11 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
学生操行评语大全
2014/04/24 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
环保志愿者活动方案
2014/08/14 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python