This commit is contained in:
睿 安
2026-01-21 16:48:36 +08:00
commit abba5cb273
246 changed files with 57473 additions and 0 deletions

3
app/log/__init__.py Normal file
View File

@@ -0,0 +1,3 @@
from .logger import log, logger
__all__ = ["logger", "log"]

View File

@@ -0,0 +1,75 @@
import sqlite3
import sys
import traceback
import requests
from app.person import Me
class ExceptionHanding:
def __init__(self, exc_type, exc_value, traceback_):
self.exc_type = exc_type
self.exc_value = exc_value
self.traceback = traceback_
self.error_message = ''.join(traceback.format_exception(exc_type, exc_value, traceback_))
def parser_exc(self):
if isinstance(self.exc_value, PermissionError):
return f'权限错误,请使用管理员身份运行并将文件夹设置为可读写'
elif isinstance(self.exc_value, sqlite3.DatabaseError):
return '数据库错误请删除app文件夹后重启电脑再运行软件'
elif isinstance(self.exc_value, OSError) and self.exc_value.errno == 28:
return '空间磁盘不足,请预留足够多的磁盘空间以供软件正常运行'
elif isinstance(self.exc_value, TypeError) and 'NoneType' in str(self.exc_value) and 'not iterable' in str(
self.exc_value):
return '数据库错误请删除app文件夹后重启电脑再运行软件'
elif isinstance(self.exc_value,KeyboardInterrupt):
return ''
else:
return '未知错误类型,可参考 https://blog.lc044.love/post/7 解决该问题\n温馨提示重启电脑可解决80%的问题'
def __str__(self):
errmsg = f'{self.error_message}\n{self.parser_exc()}'
return errmsg
def excepthook(exc_type, exc_value, traceback_):
# 将异常信息转为字符串
# 在这里处理全局异常
error_message = ExceptionHanding(exc_type, exc_value, traceback_)
txt = '您可添加QQ群发送log文件以便解决该问题'
msg = f"Exception Type: {exc_type.__name__}\nException Value: {exc_value}\ndetails: {error_message}\n\n{txt}"
print(msg)
# 调用原始的 excepthook以便程序正常退出
sys.__excepthook__(exc_type, exc_value, traceback_)
def send_error_msg( message):
url = "http://api.lc044.love/error"
if not message:
return {
'code': 201,
'errmsg': '日志为空'
}
data = {
'username': Me().wxid,
'error': message
}
try:
response = requests.post(url, json=data)
if response.status_code == 200:
resp_info = response.json()
return resp_info
else:
return {
'code': 503,
'errmsg': '服务器错误'
}
except:
return {
'code': 404,
'errmsg': '客户端错误'
}

36
app/log/logger.py Normal file
View File

@@ -0,0 +1,36 @@
import logging
import os
import time
import traceback
from functools import wraps
filename = time.strftime("%Y-%m-%d", time.localtime(time.time()))
logger = logging.getLogger('test')
logger.setLevel(level=logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
try:
if not os.path.exists('./app/log/logs'):
os.mkdir('./app/log/logs')
file_handler = logging.FileHandler(f'./app/log/logs/{filename}-log.log')
except:
file_handler = logging.FileHandler(f'{filename}-log.log')
file_handler.setLevel(level=logging.INFO)
file_handler.setFormatter(formatter)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
def log(func):
@wraps(func)
def log_(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
logger.error(
f"\n{func.__qualname__} is error,params:{(args, kwargs)},here are details:\n{traceback.format_exc()}")
return log_