python 使用装饰器并记录log
2024-10-20 04:28:56
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")
最新文章
- 描述Linux shell中单引号,双引号及不加引号的简单区别(计时2分钟)
- Android显示基础--单位与尺寸
- 文件系统:Ext3和Ext4
- checkbox的三种状态处理
- jQuery 模板插件jquery-tmpl
- c# mongo 返回指定的列
- NTOPNG,用来平时优化网站性能,用处大的
- windows server 2008 应用程序池自动关闭 C:\Windows\system32\RpcProxy\RpcProxy.dll failed to load
- ES6入门2
- Aliase_小白学Python_Day0_前言
- Redis 慢日志
- Python中的threadlocal
- Scrapy定时执行爬取任务与定时关闭任务
- IDEA中使用lombok插件
- 读取excel日期数据问题
- 面向对象【day07】:多态(九)
- Codeforces 937D - Sleepy Game
- C#LinQ语法
- (转)谈谈RTP传输中的负载类型和时间戳
- HDU 1711 Number Sequence (字符串匹配,KMP算法)