From 5a2ab36b60f4c3ac646f0e4348519c4104ec1832 Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Tue, 23 Sep 2025 00:14:51 +0500 Subject: [PATCH] feat(cli): added --debug-level= argument Signed-off-by: Boris Yumankulov --- portprotonqt/app.py | 14 +++++++++----- portprotonqt/cli.py | 6 ++++++ portprotonqt/logger.py | 32 +++++++++++++++++++++++++------- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/portprotonqt/app.py b/portprotonqt/app.py index 903f42c..afd0af4 100644 --- a/portprotonqt/app.py +++ b/portprotonqt/app.py @@ -4,11 +4,9 @@ from PySide6.QtWidgets import QApplication from PySide6.QtGui import QIcon from portprotonqt.main_window import MainWindow from portprotonqt.config_utils import save_fullscreen_config -from portprotonqt.logger import get_logger +from portprotonqt.logger import get_logger, setup_logger from portprotonqt.cli import parse_args -logger = get_logger(__name__) - __app_id__ = "ru.linux_gaming.PortProtonQt" __app_name__ = "PortProtonQt" __app_version__ = "0.1.5" @@ -20,6 +18,14 @@ def main(): app.setApplicationName(__app_name__) app.setApplicationVersion(__app_version__) + args = parse_args() + + # Setup logger with specified debug level + setup_logger(args.debug_level) + + # Reinitialize logger after setup to ensure it uses the new configuration + logger = get_logger(__name__) + system_locale = QLocale.system() qt_translator = QTranslator() translations_path = QLibraryInfo.path(QLibraryInfo.LibraryPath.TranslationsPath) @@ -28,8 +34,6 @@ def main(): else: logger.warning(f"Qt translations for {system_locale.name()} not found in {translations_path}, using english language") - args = parse_args() - window = MainWindow(app_name=__app_name__) if args.fullscreen: diff --git a/portprotonqt/cli.py b/portprotonqt/cli.py index f781dfc..4898100 100644 --- a/portprotonqt/cli.py +++ b/portprotonqt/cli.py @@ -13,4 +13,10 @@ def parse_args(): action="store_true", help="Запустить приложение в полноэкранном режиме и сохранить эту настройку" ) + parser.add_argument( + "--debug-level", + choices=['ALL', 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + default='NOTSET', + help="Установить уровень логирования (ALL для всех сообщений, по умолчанию: без логов)" + ) return parser.parse_args() diff --git a/portprotonqt/logger.py b/portprotonqt/logger.py index 6ea6b09..1087212 100644 --- a/portprotonqt/logger.py +++ b/portprotonqt/logger.py @@ -1,16 +1,34 @@ import logging -def setup_logger(): +def setup_logger(level='NOTSET'): """Настройка базовой конфигурации логирования.""" - logging.basicConfig( - level=logging.INFO, - format='[%(levelname)s] %(message)s', - handlers=[logging.StreamHandler()] - ) + # Clear existing handlers to prevent duplicates + root_logger = logging.getLogger() + for handler in root_logger.handlers[:]: + root_logger.removeHandler(handler) + + # Convert string level to logging level constant, map ALL to DEBUG + if level.upper() == 'ALL': + log_level = logging.DEBUG + else: + log_level = getattr(logging, level.upper(), logging.NOTSET) + + # Configure logging with null handler if level is NOTSET + if log_level == logging.NOTSET: + logging.basicConfig( + level=logging.NOTSET, + handlers=[logging.NullHandler()] + ) + else: + logging.basicConfig( + level=log_level, + format='[%(levelname)s] %(message)s', + handlers=[logging.StreamHandler()] + ) def get_logger(name): """Возвращает логгер для указанного модуля.""" return logging.getLogger(name) -# Инициализация логгера при импорте модуля +# Инициализация логгера при импорте модуля (без логов по умолчанию) setup_logger()