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在控制台输出进度条的方法
Jun 20 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 Python
python2.7 json 转换日期的处理的示例
Mar 07 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
python后端接收前端回传的文件方法
Jan 02 Python
学python安装的软件总结
Oct 12 Python
python 实现dict转json并保存文件
Dec 05 Python
python使用正则来处理各种匹配问题
Dec 22 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 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 download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
PHP中删除变量时unset()和null的区别分析
2011/01/27 PHP
屏蔽机器人从你的网站搜取email地址的php代码
2012/11/14 PHP
joomla jce editor 解决上传中文名文件失败问题
2013/06/09 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
2019/10/12 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
TensorFlow 滑动平均的示例代码
2018/06/19 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
Pandas分组与排序的实现
2019/07/23 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
Python中Yield的基本用法
2020/10/18 Python
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
介绍一下游标
2012/01/10 面试题
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
物流业务员岗位职责
2014/02/08 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
工程部部长岗位职责
2015/02/12 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python