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标准库之多进程(multiprocessing包)介绍
Nov 25 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
对Python信号处理模块signal详解
Jan 09 Python
python实现淘宝秒杀脚本
Jun 23 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
Python3安装Pillow与PIL的方法
Apr 03 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
Django接收自定义http header过程详解
Aug 23 Python
python多环境切换及pyenv使用过程详解
Sep 27 Python
python列表的逆序遍历实现
Apr 20 Python
Python虚拟环境venv用法详解
May 25 Python
python 两种方法删除空文件夹
Sep 29 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
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
试用php中oci8扩展
2015/06/18 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
jquery text()要注意啦
2009/10/30 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
连接Python程序与MySQL的教程
2015/04/29 Python
python实现图片处理和特征提取详解
2017/11/13 Python
Python实现Linux监控的方法
2019/05/16 Python
Django 拆分model和view的实现方法
2019/08/16 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
Html5定位终极解决方案
2020/02/05 HTML / CSS
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
合作经营协议书
2014/04/17 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
2014年加油站工作总结
2014/12/04 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
解除租赁合同协议书
2016/03/21 职场文书
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis