复制import os
import sys
import time
from loguru import logger
import inspect
def creat_time_os():
creat_time = time.strftime("%Y-%m-%d", time.localtime())
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
log_path_dir = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
logs_path = os.path.join(log_path_dir, "logs", creat_time)
if os.path.exists(logs_path):
return logs_path
else:
try:
os.makedirs(logs_path)
except Exception as e:
print(e)
return logs_path
class uru_logger:
def __init__(self):
logger_format = "{time:YYYY-MM-DD HH:mm:ss,SSS} | {level} | {message}"
logger.remove()
logger.add(sys.stderr,
level="DEBUG",
format=logger_format,
)
logs_path = creat_time_os()
logname = os.path.join(logs_path, sys.argv[0].split('/')[-1].split('.')[0]) + '.log'
logger.add(
logname,
encoding="utf-8",
format=logger_format,
level="INFO",
rotation="500MB",
retention="5 days",
compression="zip")
self.creat_time = time.strftime("%Y-%m-%d", time.localtime())
self.log = logger
def check_format(self):
if time.strftime("%Y-%m-%d", time.localtime()) != self.creat_time:
self.__init__()
uru_logger_log = uru_logger()
def log_info(*args):
'''
info log信息
:param message:
:return:
'''
uru_logger_log.check_format()
try:
caller_frame = inspect.currentframe().f_back
function_name = caller_frame.f_code.co_name
line_number = caller_frame.f_lineno
previous_module = caller_frame.f_globals['__name__']
message_part = args[0] if len(args) == 1 else str(args)
custom_message = f"{previous_module} | {function_name}:{line_number} | - {message_part}"
uru_logger_log.log.info(custom_message)
except:
uru_logger_log.log.info(args[0] if len(args) == 1 else args)
def log_debug(*args):
'''
debug log信息
:param message:
:return:
'''
uru_logger_log.check_format()
try:
caller_frame = inspect.currentframe().f_back
function_name = caller_frame.f_code.co_name
line_number = caller_frame.f_lineno
previous_module = caller_frame.f_globals['__name__']
message_part = args[0] if len(args) == 1 else str(args)
custom_message = f"{previous_module} | {function_name}:{line_number} | - {message_part}"
uru_logger_log.log.debug(custom_message)
except:
uru_logger_log.log.debug(args[0] if len(args) == 1 else args)
def log_error(*args):
'''
error log信息
:param message:
:return:
'''
uru_logger_log.check_format()
try:
caller_frame = inspect.currentframe().f_back
function_name = caller_frame.f_code.co_name
line_number = caller_frame.f_lineno
previous_module = caller_frame.f_globals['__name__']
message_part = args[0] if len(args) == 1 else str(args)
custom_message = f"{previous_module} | {function_name}:{line_number} | - {message_part}"
uru_logger_log.log.error(custom_message)
except:
uru_logger_log.log.error(args[0] if len(args) == 1 else args)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2019-08-09 练手爬虫用urllib模块获取