# !/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@author : v_jiaohaicheng@baidu.com
@des :
"""
import re
import os
import json
import time
from cup import timeplus
from cup.util import ThreadPool
from queue import Queue
import functools
class Log:
"""
日志纪录 类
"""
@staticmethod
def check(param, target):
"""
检查输入
:param param:
:param target:
:return:
"""
if param.get(target) is not None:
part = param[target]
else:
part = ""
return part
@staticmethod
def decoratelog(**param):
"""
记录日志,按天记录,每天一个新文件
:param param: logrecode:自定义日志内容;loglevel:日志等级
:return:
"""
def log2(func):
def log3(*args, **kwargs):
log_level = Log.check(param, "loglevel")
log_recode = func.__name__
file_name = os.path.basename(__file__).split(".")[0]
_path = os.path.join("./log", file_name)
os.makedirs(_path, exist_ok=True)
log_file = os.path.join(_path, "{}.log".format(
str(time.strftime("%Y-%m-%d", time.localtime()))))
with open(log_file, "a", encoding="utf-8")as fp:
msg = "{}\t[INFO:DECORATE {}]\t{}\n".format(
timeplus.get_str_now(), log_level, log_recode)
fp.write(msg)
print(msg)
return func(*args, **kwargs)
return log3
return log2
@staticmethod
def recode_func(func):
"""
记录函数开始和结束
:param func:
:return:
"""
@functools.wraps(func)
def wrapper(*args, **kwargs):
file_name = os.path.basename(__file__).split(".")[0]
_path = os.path.join("./log", file_name)
os.makedirs(_path, exist_ok=True)
log_file = os.path.join(_path, "{}.log".format(
str(time.strftime("%Y-%m-%d", time.localtime()))))
msg = "{} IN : {}".format(
str(time.strftime("%Y-%m-%d", time.localtime())), func.__name__)
print(msg)
with open(log_file, "a", encoding="utf-8")as fp:
fp.write("{}\n".format(msg))
result = func(*args, **kwargs)
msg = "{} OUT : {}".format(
str(time.strftime("%Y-%m-%d", time.localtime())), func.__name__)
with open(log_file, "a", encoding="utf-8")as fp:
fp.write("{}\n".format(msg))
print(msg)
return result
return wrapper
@staticmethod
def I(msg):
"""
INFO 日志
:param msg:
:return:
"""
log_level = "INFO"
file_name = os.path.basename(__file__).split(".")[0]
_path = os.path.join("./log", file_name)
os.makedirs(_path, exist_ok=True)
log_file = os.path.join(_path, "{}.log".format(
str(time.strftime("%Y-%m-%d", time.localtime()))))
with open(log_file, "a", encoding="utf-8")as fp:
msg = "{}\t[INFO:LOG{}]\t{}\n".format(
timeplus.get_str_now(), log_level, msg)
fp.write(msg)
print(msg.strip())
@staticmethod
def E(msg):
"""
EXCEPT 日志
:param msg:
:return:
"""
log_level = "EXCEPT"
file_name = os.path.basename(__file__).split(".")[0]
_path = os.path.join("./log", file_name)
os.makedirs(_path, exist_ok=True)
log_file = os.path.join(_path, "{}.log".format(
str(time.strftime("%Y-%m-%d", time.localtime()))))
with open(log_file, "a", encoding="utf-8")as fp:
msg = "{}\t[EXCEPT:LOG{}]\t{}\n".format(
timeplus.get_str_now(), log_level, msg)
fp.write(msg)
print(msg.strip())
class Dispose(Log):
def __init__(self):
pass
@Log.decoratelog(loglevel=3)
@Log.recode_func
def process(self, *args, **kwargs):
"""
处理函数
:param args:
:param kwargs:
:return:
"""
pass
Log.E("Test")
if __name__ == '__main__':
dp = Dispose()
file = R"1"
file_out = R"2"
dp.process(file=file, file_out=file_out)
Python 自定义日志处理类(装饰器)
于 2023-02-13 00:58:25 首次发布