60 lines
2.4 KiB
Python
60 lines
2.4 KiB
Python
import glob
|
|
import os
|
|
import sys
|
|
import threading
|
|
import traceback
|
|
import zipfile
|
|
from datetime import datetime
|
|
from tkinter import messagebox
|
|
|
|
from loguru import logger
|
|
|
|
from core import Core
|
|
|
|
|
|
def handle_exception(exc_type, exc_value, exc_traceback):
|
|
if issubclass(exc_type, KeyboardInterrupt) or issubclass(exc_type, SystemExit):
|
|
sys.__excepthook__(exc_type, exc_value, exc_traceback)
|
|
return
|
|
logger.error("Unhandled exception:\n" + "".join(traceback.format_exception(exc_type, exc_value, exc_traceback)))
|
|
|
|
def handle_thread_exception(args):
|
|
exc_type, exc_value, exc_traceback = args.exc_type, args.exc_value, args.exc_traceback
|
|
if issubclass(exc_type, KeyboardInterrupt) or issubclass(exc_type, SystemExit):
|
|
return
|
|
logger.error("Unhandled exception in thread:\n" + "".join(traceback.format_exception(exc_type, exc_value, exc_traceback)))
|
|
|
|
|
|
log_dir = Core.DIR / "logs"
|
|
log_file = log_dir / "info.log"
|
|
os.makedirs(log_dir, exist_ok=True)
|
|
os.makedirs(Core.DIR / "cache", exist_ok=True)
|
|
try:
|
|
if os.path.exists(log_file):
|
|
ftime = os.path.getmtime(log_file)
|
|
index = 1
|
|
while True:
|
|
zip_path = log_dir / f"{datetime.fromtimestamp(ftime).strftime('%Y-%m-%d')}-{index}.zip"
|
|
if not os.path.exists(zip_path):
|
|
break
|
|
index += 1
|
|
with zipfile.ZipFile(zip_path, "w") as zipf:
|
|
logs_files = glob.glob(f"{log_dir}/*.log")
|
|
for file in logs_files:
|
|
if os.path.exists(file):
|
|
zipf.write(file, os.path.basename(file))
|
|
os.remove(file)
|
|
except PermissionError:
|
|
messagebox.showerror(f"ezSyncer {Core.ver_str}",
|
|
"Some files are locked...\nProgram cannot works in multiplies instances.")
|
|
sys.exit(1)
|
|
logger.remove()
|
|
fmt = "<green>{elapsed} -- {time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level:<8}</level> | {extra[module]:^12} | {extra[prefix]:<12} | {message}"
|
|
logger.add(sys.stdout, level="DEBUG", format=fmt, backtrace=True, diagnose=True)
|
|
logger.add(log_file, level="INFO", format=fmt, backtrace=False, diagnose=False, rotation="25 MB")
|
|
logger.add(log_dir / "debug.log", level="DEBUG", format=fmt, rotation="10 MB")
|
|
logger.add(log_dir / "low_debug.log", level="DEBUG", rotation="10 MB")
|
|
sys.excepthook = handle_exception
|
|
threading.excepthook = handle_thread_exception
|
|
logger.bind(module="LoggerSetup", prefix="init").success("Logger initialized.")
|