Marek4321 commited on
Commit
ef28b60
verified
1 Parent(s): 6ef4932

Create logger.py

Browse files
Files changed (1) hide show
  1. utils/logger.py +122 -0
utils/logger.py ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # @title utils/logger.py
2
+ import logging
3
+ import sys
4
+ from datetime import datetime
5
+ from pathlib import Path
6
+ from typing import Optional, Dict, Any, Callable
7
+
8
+ class SpotMakerLogger:
9
+ """
10
+ Logger dla aplikacji SpotMaker.
11
+ Obs艂uguje:
12
+ - Logowanie do pliku i konsoli
13
+ - 艢ledzenie post臋pu dla GUI
14
+ - Logowanie szczeg贸艂owe dla ka偶dego modu艂u
15
+ """
16
+ def __init__(self, log_dir: str = "logs"):
17
+ self.log_dir = Path(log_dir)
18
+ self.log_dir.mkdir(parents=True, exist_ok=True)
19
+
20
+ # Inicjalizacja g艂贸wnego loggera
21
+ self.logger = logging.getLogger('SpotMaker')
22
+ self.logger.setLevel(logging.DEBUG)
23
+
24
+ # Format log贸w
25
+ formatter = logging.Formatter(
26
+ '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
27
+ )
28
+
29
+ # Handler dla pliku
30
+ file_handler = logging.FileHandler(
31
+ self.log_dir / f"spotmaker_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log",
32
+ encoding='utf-8'
33
+ )
34
+ file_handler.setLevel(logging.DEBUG)
35
+ file_handler.setFormatter(formatter)
36
+
37
+ # Handler dla konsoli
38
+ console_handler = logging.StreamHandler(sys.stdout)
39
+ console_handler.setLevel(logging.INFO)
40
+ console_handler.setFormatter(formatter)
41
+
42
+ self.logger.addHandler(file_handler)
43
+ self.logger.addHandler(console_handler)
44
+
45
+ # Stan dla GUI
46
+ self.current_progress: Dict[str, float] = {}
47
+ self.current_status: Dict[str, str] = {}
48
+
49
+ # Callback dla aktualizacji UI
50
+ self.update_ui_callback: Optional[Callable] = None
51
+
52
+ def log(self, module: str, message: str, level: str = "info") -> None:
53
+ """
54
+ Loguje wiadomo艣膰 z okre艣lonego modu艂u.
55
+
56
+ Args:
57
+ module: Nazwa modu艂u (np. 'video_gen', 'audio_gen')
58
+ message: Tre艣膰 wiadomo艣ci
59
+ level: Poziom logowania ('debug', 'info', 'warning', 'error', 'critical')
60
+ """
61
+ log_method = getattr(self.logger, level.lower())
62
+ formatted_msg = f"[{module}] {message}"
63
+ log_method(formatted_msg)
64
+
65
+ # Aktualizacja interfejsu je艣li zdefiniowano callback
66
+ if self.update_ui_callback:
67
+ self.update_ui_callback(formatted_msg)
68
+
69
+ def update_progress(self, module: str, progress: float, status: Optional[str] = None) -> Dict[str, Any]:
70
+ """
71
+ Aktualizuje post臋p operacji dla danego modu艂u.
72
+
73
+ Args:
74
+ module: Nazwa modu艂u
75
+ progress: Warto艣膰 post臋pu (0-100)
76
+ status: Opcjonalny status tekstowy
77
+
78
+ Returns:
79
+ Dict zawieraj膮cy aktualny stan dla GUI
80
+ """
81
+ self.current_progress[module] = min(max(progress, 0), 100)
82
+ if status:
83
+ self.current_status[module] = status
84
+ self.log(module, f"Status: {status} | Post臋p: {progress:.1f}%")
85
+
86
+ return {
87
+ 'progress': self.current_progress,
88
+ 'status': self.current_status
89
+ }
90
+
91
+ def get_module_progress(self, module: str) -> float:
92
+ """Zwraca aktualny post臋p dla danego modu艂u."""
93
+ return self.current_progress.get(module, 0.0)
94
+
95
+ def get_module_status(self, module: str) -> str:
96
+ """Zwraca aktualny status dla danego modu艂u."""
97
+ return self.current_status.get(module, "Nieaktywny")
98
+
99
+ def reset_module(self, module: str) -> None:
100
+ """Resetuje post臋p i status dla danego modu艂u."""
101
+ self.current_progress[module] = 0.0
102
+ self.current_status[module] = "Zresetowano"
103
+ self.log(module, "Zresetowano stan modu艂u")
104
+
105
+ def format_error(self, module: str, error: Exception) -> str:
106
+ """
107
+ Formatuje b艂膮d do logowania.
108
+
109
+ Args:
110
+ module: Nazwa modu艂u
111
+ error: Obiekt wyj膮tku
112
+
113
+ Returns:
114
+ Sformatowana wiadomo艣膰 b艂臋du
115
+ """
116
+ error_msg = f"[{module}] B艂膮d: {str(error)}"
117
+ self.logger.error(error_msg)
118
+ return error_msg
119
+
120
+ def set_ui_callback(self, callback_fn: Callable[[str], None]) -> None:
121
+ """Ustawia funkcj臋 callback do aktualizacji interfejsu."""
122
+ self.update_ui_callback = callback_fn