Skip to content

Commit

Permalink
fix: debug信息调试
Browse files Browse the repository at this point in the history
  • Loading branch information
yuhldr committed Sep 20, 2024
1 parent d658065 commit f350dfb
Show file tree
Hide file tree
Showing 14 changed files with 112 additions and 17 deletions.
2 changes: 1 addition & 1 deletion data/resources/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ metainfo = i18n.merge_file(
output: APP_ID + '.metainfo.xml',
po_dir: join_paths(meson.project_source_root(), 'po'),
install: true,
install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'resources')
install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'metainfo')
)


Expand Down
2 changes: 2 additions & 0 deletions lfy.in
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ def set_internationalization():
locale.bindtextdomain(APP_ID, LOCALE_DIR)
locale.textdomain(APP_ID)
except AttributeError as e:
from lfy.api.utils.debug import get_logger
get_logger().error(e)
print(f"Some gettext translations will not work. Error:\n{e}")

gettext.bindtextdomain(APP_ID, LOCALE_DIR)
Expand Down
3 changes: 3 additions & 0 deletions lfy/api/server/bing.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from requests import RequestException

from lfy.api.server import TIME_OUT, Server
from lfy.api.utils.debug import get_logger


def _init_session():
Expand Down Expand Up @@ -83,6 +84,7 @@ def translate_text(self, text, lang_to="zh-cn", lang_from="auto", n=0):
hs = self.session.headers
print(hs["my_host"])
except RequestException as e:
get_logger().error(e)
print("bing-session", n, type(e), e)
return self.translate_text(text, lang_to, lang_from, n + 1)

Expand All @@ -103,6 +105,7 @@ def translate_text(self, text, lang_to="zh-cn", lang_from="auto", n=0):
try:
response = self.session.post(url, data=data, timeout=TIME_OUT)
except RequestException as e:
get_logger().error(e)
print("bing-post", n, type(e), e)
return self.translate_text(text, lang_to, lang_from, n + 1)

Expand Down
2 changes: 2 additions & 0 deletions lfy/api/server/com.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from lfy.api.server import (Server, aliyun, baidu, bing, google, huoshan,
tencent)
from lfy.api.utils.debug import get_logger
from lfy.settings import Settings


Expand All @@ -28,6 +29,7 @@ def _translate(args):
em = _("something error:")
em = f"{em}{server.name}\n\n"
em = f"{em}{str(e)}\n\n{traceback.format_exc()}"
get_logger().error(e)
return False, em, server, time.time()-st


Expand Down
5 changes: 4 additions & 1 deletion lfy/api/server/google.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from requests import ConnectTimeout, RequestException

from lfy.api.server import TIME_OUT, Server
from lfy.api.utils.debug import get_logger


def _get_session():
Expand Down Expand Up @@ -56,7 +57,7 @@ def translate_text(self, text, lang_to="zh-cn", lang_from="auto", n=0):
str: _description_
"""

if n > 5:
if n > 3:
raise ValueError(_("something error, try other translate engine?"))

text = text.replace("#", "")
Expand All @@ -69,9 +70,11 @@ def translate_text(self, text, lang_to="zh-cn", lang_from="auto", n=0):
response = self.session.post(url, params=params, data={'q': text}, timeout=TIME_OUT)
except ConnectTimeout as e0:
print("google0", n, type(e0), e0)
get_logger().error(e0)
return False, _("The connection timed out. Maybe there is a network problem")
except RequestException as e:
print("google", n, type(e), e)
get_logger().error(e)
return self.translate_text(text, lang_to, lang_from, n + 1)

s = ""
Expand Down
3 changes: 3 additions & 0 deletions lfy/api/server/ocr/easyocr.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
'ocr'
from lfy.api.server import Server
from lfy.api.utils.debug import get_logger


class EasyOcrServer(Server):
Expand Down Expand Up @@ -36,4 +38,5 @@ def ocr_image(self, img_path: str, lang_keys=None):
return True, s.strip()
except ModuleNotFoundError as e:
print(e)
get_logger().error(e)
return False, "请安装 easyocr\n" + str(e)
5 changes: 4 additions & 1 deletion lfy/api/server/ocr/pytesseract.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

'ocr本地'
from lfy.api.server import Server
from lfy.api.utils.debug import get_logger


def lib_ok():
Expand All @@ -13,6 +14,7 @@ def lib_ok():
return True
except ModuleNotFoundError as e:
print(e)
get_logger().error(e)
return False


Expand Down Expand Up @@ -56,4 +58,5 @@ def ocr_image(self, img_path: str, lang_keys=None):
return True, pytesseract.image_to_string(img_path, lang=s)
except ModuleNotFoundError as e:
print(e)
get_logger().error(e)
return False, "请安装 pytesseract\n" + str(e)
2 changes: 2 additions & 0 deletions lfy/api/utils/bak.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from gi.repository import Gio, GLib

from lfy import APP_ID # pylint: disable=E0611
from lfy.api.utils.debug import get_logger
from lfy.settings import Settings


Expand Down Expand Up @@ -58,4 +59,5 @@ def restore_gsettings(s):

except Exception as e: # pylint: disable=W0718
print(e)
get_logger().error(e)
return _('Please copy the configuration data in json format first')
17 changes: 8 additions & 9 deletions lfy/api/utils/check_update.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
"""更新
"""

import logging

import requests

from lfy import PACKAGE_URL, VERSION # pylint: disable=E0611
from lfy.api.server import TIME_OUT
from lfy.api.utils.debug import get_logger


def get_by_gitee():
Expand All @@ -20,13 +19,13 @@ def get_by_gitee():
try:
request = requests.get(url, timeout=TIME_OUT)
if request.status_code == 200:
logging.info("gitee update msg ok")
get_logger().info("gitee update msg ok")
return request.json()
except requests.exceptions.ConnectTimeout as e:
logging.error(e)
get_logger().error(e)
return {}
except Exception as e: # pylint: disable=W0718
logging.error(e)
get_logger().error(e)
return None


Expand All @@ -41,13 +40,13 @@ def get_by_github():
try:
request = requests.get(url, timeout=TIME_OUT)
if request.status_code == 200:
logging.info("github update msg ok")
get_logger().info("github update msg ok")
return request.json()
except requests.exceptions.ConnectTimeout as e:
logging.error(e)
get_logger().error(e)
return {}
except Exception as e: # pylint: disable=W0718
logging.error(e)
get_logger().error(e)
return None


Expand Down Expand Up @@ -99,5 +98,5 @@ def main():
return None
# pylint: disable=W0718
except Exception as e:
logging.error(e)
get_logger().error(e)
return error_config
69 changes: 69 additions & 0 deletions lfy/api/utils/debug.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
'错误缓存'
import logging


class InMemoryLogHandler(logging.Handler):
"""创建一个内存中的日志处理器
Args:
logging (_type_): _description_
"""

def __init__(self, max_logs=20):
super().__init__()
self.log_buffer = []
self.max_logs = max_logs

def emit(self, record):
log_entry = self.format(record)
if len(self.log_buffer) >= self.max_logs:
# 如果日志超过最大限制,删除最旧的日志
self.log_buffer.pop(0)
self.log_buffer.append(log_entry)

def get_logs(self):
"""获取日志
Returns:
str: _description_
"""
return "\n\n".join(self.log_buffer)


# 初始化日志系统
logger = logging.getLogger("lfy")
logger.setLevel(logging.DEBUG)

# 设置格式
formatter = logging.Formatter(
'%(asctime)s - %(levelname)s\n[%(filename)s:%(lineno)d]\n%(message)s')
# 使用自定义内存日志处理器
in_memory_handler = InMemoryLogHandler(max_logs=10)
in_memory_handler.setFormatter(formatter)
logger.addHandler(in_memory_handler)

# 测试日志输出
# for i in range(15):
# logger.info(f"Log message {i}")

# 打印当前的内存日志
# print("Current logs:")
# print(in_memory_handler.get_logs())


def get_logger():
"""提供给外部的接口
Returns:
_type_: _description_
"""
return logger


def get_log_handler():
"""获取当前的内存日志
Returns:
_type_: _description_
"""
return in_memory_handler
3 changes: 3 additions & 0 deletions lfy/code.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
'终端翻译'
import os
import traceback
from gettext import gettext as _

from gi.repository import Gdk

from lfy.api import create_server_t, get_lang, server_key2i
from lfy.api.utils.debug import get_logger
from lfy.settings import Settings


Expand Down Expand Up @@ -37,6 +39,7 @@ def req_text(s):
print(text)

except Exception as e: # pylint: disable=W0718
get_logger().error(e)
error_msg = _("something error:")
error_msg2 = f"{str(e)}\n\n{traceback.format_exc()}"
text = f"{error_msg}{tran_server.name}\n\n{error_msg2}"
Expand Down
9 changes: 6 additions & 3 deletions lfy/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from lfy.api.utils import is_text
from lfy.api.utils.bak import backup_gsettings
from lfy.api.utils.check_update import main as check_update
from lfy.api.utils.debug import get_log_handler
from lfy.preference import PreferenceWindow
from lfy.settings import Settings
from lfy.translate import TranslateWindow
Expand Down Expand Up @@ -101,7 +102,6 @@ def on_about_action(self, _widget, _w):
"""
# pylint: disable=E1101
path = f'{RES_PATH}/{self._application_id}.metainfo.xml'
print(path)

ad = Adw.AboutDialog.new_from_appdata(path, VERSION)
ad.set_developers(['yuh <[email protected]>, 2023-2023'])
Expand All @@ -124,9 +124,12 @@ def on_about_action(self, _widget, _w):
if "server-sk-" in k and ("key" not in v or "Key" not in v):
v = "******"
ss[k] = v
s += f"\n\n******* config *******\n"
s += "\n\n******* config *******\n"
s += json.dumps(ss, indent=4, ensure_ascii=False)
s += f"\n************"
s += "\n************"

s += "\n\n******* debug log *******\n"
s += get_log_handler().get_logs()

ad.set_debug_info(s)

Expand Down
3 changes: 3 additions & 0 deletions lfy/translate.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from lfy.api.constant import NO_TRANSLATED_TXTS
from lfy.api.server import Server
from lfy.api.utils import cal_md5
from lfy.api.utils.debug import get_logger
from lfy.api.utils.notify import nf_t
from lfy.settings import Settings
from lfy.widgets.theme_switcher import ThemeSwitcher
Expand Down Expand Up @@ -283,6 +284,7 @@ def request_text(self, s, server, lk=None):
_ok, text = server.translate_text(s, lk)

except Exception as e: # pylint: disable=W0718
get_logger().error(e)
error_msg = _("something error:")
error_msg2 = f"{str(e)}\n\n{traceback.format_exc()}"
text = f"{error_msg}{server.name}\n\n{error_msg2}"
Expand Down Expand Up @@ -315,6 +317,7 @@ def update_ui(self, s="", ocr=False):
nf_t(self.app, f"{self.tran_server.name} " +
_("Translation completed"), s)
except TypeError as e:
get_logger().error(e)
error_msg = _("something error:")
error_msg2 = f"{str(e)}\n\n{traceback.format_exc()}"
em = f"{error_msg}\n\n{error_msg2}"
Expand Down
4 changes: 2 additions & 2 deletions lfy/widgets/server_preferences.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
# Copyright 2023 Rafael Mardojai CM
# SPDX-License-Identifier: GPL-3.0-or-later

import logging
import re
import threading

from gi.repository import Adw, GLib, Gtk

from lfy.api.server import Server
from lfy.api.utils.debug import get_logger


# pylint: disable=E1101
Expand Down Expand Up @@ -114,6 +114,6 @@ def request_text(self, fun, api_key, entry, spinner):
try:
valid = fun(api_key)
except Exception as exc: # pylint: disable=W0718
logging.error(exc)
get_logger().error(exc)

GLib.idle_add(self.update_ui, valid, entry, spinner)

0 comments on commit f350dfb

Please sign in to comment.