mirror of
https://github.com/Azornes/Comfyui-LayerForge.git
synced 2026-03-24 05:52:12 -03:00
Add logging system
This commit is contained in:
316
README_LOGGER.md
Normal file
316
README_LOGGER.md
Normal file
@@ -0,0 +1,316 @@
|
||||
# System Logowania dla ComfyUI-LayerForge
|
||||
|
||||
Ten dokument opisuje system logowania zaimplementowany dla projektu ComfyUI-LayerForge, który umożliwia łatwe zarządzanie debugowaniem kodu zarówno w części JavaScript, jak i Python.
|
||||
|
||||
## Spis treści
|
||||
|
||||
1. [Wprowadzenie](#wprowadzenie)
|
||||
2. [Konfiguracja](#konfiguracja)
|
||||
3. [Użycie w JavaScript](#użycie-w-javascript)
|
||||
4. [Użycie w Python](#użycie-w-python)
|
||||
5. [Poziomy logowania](#poziomy-logowania)
|
||||
6. [Zarządzanie logami](#zarządzanie-logami)
|
||||
7. [Przykłady](#przykłady)
|
||||
|
||||
## Wprowadzenie
|
||||
|
||||
System logowania ComfyUI-LayerForge został zaprojektowany, aby zapewnić:
|
||||
|
||||
- Spójne logowanie w całym projekcie (JavaScript i Python)
|
||||
- Możliwość włączania/wyłączania logów globalnie lub per moduł
|
||||
- Różne poziomy logowania (DEBUG, INFO, WARN, ERROR)
|
||||
- Kolorowe logi w konsoli
|
||||
- Możliwość zapisywania logów do plików
|
||||
- Eksport logów do analizy
|
||||
|
||||
## Konfiguracja
|
||||
|
||||
### Konfiguracja JavaScript
|
||||
|
||||
```javascript
|
||||
// Importuj logger
|
||||
import {logger, LogLevel} from "./logger.js";
|
||||
|
||||
// Konfiguracja globalna
|
||||
logger.configure({
|
||||
globalLevel: LogLevel.INFO, // Domyślny poziom logowania
|
||||
useColors: true, // Kolorowe logi w konsoli
|
||||
saveToStorage: true, // Zapisywanie logów do localStorage
|
||||
maxStoredLogs: 1000 // Maksymalna liczba przechowywanych logów
|
||||
});
|
||||
|
||||
// Konfiguracja per moduł
|
||||
logger.setModuleLevel('Canvas', LogLevel.DEBUG);
|
||||
logger.setModuleLevel('API', LogLevel.WARN);
|
||||
|
||||
// Włączanie/wyłączanie globalnie
|
||||
logger.setEnabled(true); // Włącz wszystkie logi
|
||||
logger.setEnabled(false); // Wyłącz wszystkie logi
|
||||
```
|
||||
|
||||
### Konfiguracja Python
|
||||
|
||||
```python
|
||||
# Importuj logger
|
||||
from python.logger import logger, LogLevel, set_debug, set_file_logging
|
||||
|
||||
# Konfiguracja globalna
|
||||
logger.configure({
|
||||
'global_level': LogLevel.INFO,
|
||||
'use_colors': True,
|
||||
'log_to_file': True,
|
||||
'log_dir': 'logs',
|
||||
'max_file_size_mb': 10,
|
||||
'backup_count': 5
|
||||
})
|
||||
|
||||
# Konfiguracja per moduł
|
||||
logger.set_module_level('canvas_node', LogLevel.DEBUG)
|
||||
logger.set_module_level('api', LogLevel.WARN)
|
||||
|
||||
# Szybkie włączanie debugowania
|
||||
set_debug(True) # Ustawia globalny poziom na DEBUG
|
||||
set_debug(False) # Ustawia globalny poziom na INFO
|
||||
|
||||
# Włączanie/wyłączanie logowania do pliku
|
||||
set_file_logging(True, 'custom_logs')
|
||||
```
|
||||
|
||||
### Konfiguracja przez zmienne środowiskowe (Python)
|
||||
|
||||
Możesz również skonfigurować logger Python za pomocą zmiennych środowiskowych:
|
||||
|
||||
```bash
|
||||
# Poziom globalny (DEBUG, INFO, WARN, ERROR, NONE)
|
||||
export LAYERFORGE_LOG_LEVEL=DEBUG
|
||||
|
||||
# Ustawienia modułów (format JSON)
|
||||
export LAYERFORGE_MODULE_LEVELS='{"canvas_node": "DEBUG", "api": "WARN"}'
|
||||
|
||||
# Inne ustawienia
|
||||
export LAYERFORGE_USE_COLORS=true
|
||||
export LAYERFORGE_LOG_TO_FILE=true
|
||||
export LAYERFORGE_LOG_DIR=logs
|
||||
export LAYERFORGE_MAX_FILE_SIZE_MB=10
|
||||
export LAYERFORGE_BACKUP_COUNT=5
|
||||
```
|
||||
|
||||
## Użycie w JavaScript
|
||||
|
||||
### Podstawowe użycie
|
||||
|
||||
```javascript
|
||||
import {logger, LogLevel} from "./logger.js";
|
||||
|
||||
// Inicjalizacja loggera dla modułu
|
||||
const log = {
|
||||
debug: (...args) => logger.debug('MojModul', ...args),
|
||||
info: (...args) => logger.info('MojModul', ...args),
|
||||
warn: (...args) => logger.warn('MojModul', ...args),
|
||||
error: (...args) => logger.error('MojModul', ...args)
|
||||
};
|
||||
|
||||
// Używanie loggera
|
||||
log.debug("To jest wiadomość debugowania");
|
||||
log.info("To jest informacja");
|
||||
log.warn("To jest ostrzeżenie");
|
||||
log.error("To jest błąd");
|
||||
|
||||
// Logowanie obiektów
|
||||
log.debug("Dane użytkownika:", { id: 123, name: "Jan Kowalski" });
|
||||
|
||||
// Logowanie błędów
|
||||
try {
|
||||
// Kod, który może rzucić wyjątek
|
||||
} catch (error) {
|
||||
log.error("Wystąpił błąd:", error);
|
||||
}
|
||||
```
|
||||
|
||||
### Dostęp z konsoli przeglądarki
|
||||
|
||||
Logger jest dostępny globalnie w przeglądarce jako `window.LayerForgeLogger`, co umożliwia łatwe debugowanie:
|
||||
|
||||
```javascript
|
||||
// W konsoli przeglądarki
|
||||
LayerForgeLogger.setGlobalLevel(LayerForgeLogger.LogLevel.DEBUG);
|
||||
LayerForgeLogger.setModuleLevel('Canvas', LayerForgeLogger.LogLevel.DEBUG);
|
||||
LayerForgeLogger.exportLogs('json'); // Eksportuje logi do pliku JSON
|
||||
```
|
||||
|
||||
## Użycie w Python
|
||||
|
||||
### Podstawowe użycie
|
||||
|
||||
```python
|
||||
from python.logger import debug, info, warn, error, exception
|
||||
|
||||
# Używanie funkcji pomocniczych
|
||||
debug('canvas_node', 'To jest wiadomość debugowania')
|
||||
info('canvas_node', 'To jest informacja')
|
||||
warn('canvas_node', 'To jest ostrzeżenie')
|
||||
error('canvas_node', 'To jest błąd')
|
||||
|
||||
# Logowanie wyjątków
|
||||
try:
|
||||
# Kod, który może rzucić wyjątek
|
||||
except Exception as e:
|
||||
exception('canvas_node', f'Wystąpił błąd: {str(e)}')
|
||||
```
|
||||
|
||||
### Używanie funkcji pomocniczych w module
|
||||
|
||||
```python
|
||||
from python.logger import logger, LogLevel, debug, info, warn, error, exception
|
||||
|
||||
# Funkcje pomocnicze dla modułu
|
||||
log_debug = lambda *args, **kwargs: debug('moj_modul', *args, **kwargs)
|
||||
log_info = lambda *args, **kwargs: info('moj_modul', *args, **kwargs)
|
||||
log_warn = lambda *args, **kwargs: warn('moj_modul', *args, **kwargs)
|
||||
log_error = lambda *args, **kwargs: error('moj_modul', *args, **kwargs)
|
||||
log_exception = lambda *args: exception('moj_modul', *args)
|
||||
|
||||
# Używanie funkcji pomocniczych
|
||||
log_debug("To jest wiadomość debugowania")
|
||||
log_info("To jest informacja")
|
||||
log_warn("To jest ostrzeżenie")
|
||||
log_error("To jest błąd")
|
||||
```
|
||||
|
||||
## Poziomy logowania
|
||||
|
||||
System logowania obsługuje następujące poziomy:
|
||||
|
||||
- **DEBUG** - Szczegółowe informacje, przydatne podczas debugowania
|
||||
- **INFO** - Ogólne informacje o działaniu aplikacji
|
||||
- **WARN** - Ostrzeżenia, które nie powodują błędów, ale mogą prowadzić do problemów
|
||||
- **ERROR** - Błędy, które uniemożliwiają wykonanie operacji
|
||||
- **NONE** - Wyłącza wszystkie logi
|
||||
|
||||
## Zarządzanie logami
|
||||
|
||||
### JavaScript
|
||||
|
||||
```javascript
|
||||
// Eksport logów do pliku
|
||||
logger.exportLogs('json'); // Eksportuje logi do pliku JSON
|
||||
logger.exportLogs('txt'); // Eksportuje logi do pliku tekstowego
|
||||
|
||||
// Czyszczenie logów
|
||||
logger.clearLogs();
|
||||
```
|
||||
|
||||
### Python
|
||||
|
||||
Logi Python są automatycznie zapisywane do plików w katalogu `logs` (lub innym skonfigurowanym), jeśli włączono opcję `log_to_file`. Pliki logów są rotowane, gdy osiągną określony rozmiar.
|
||||
|
||||
## Przykłady
|
||||
|
||||
### Przykład użycia w JavaScript
|
||||
|
||||
```javascript
|
||||
import {logger, LogLevel} from "./logger.js";
|
||||
|
||||
// Inicjalizacja loggera dla modułu Canvas
|
||||
const log = {
|
||||
debug: (...args) => logger.debug('Canvas', ...args),
|
||||
info: (...args) => logger.info('Canvas', ...args),
|
||||
warn: (...args) => logger.warn('Canvas', ...args),
|
||||
error: (...args) => logger.error('Canvas', ...args)
|
||||
};
|
||||
|
||||
// Konfiguracja loggera dla modułu Canvas
|
||||
logger.setModuleLevel('Canvas', LogLevel.DEBUG);
|
||||
|
||||
class Canvas {
|
||||
constructor() {
|
||||
log.info("Inicjalizacja Canvas");
|
||||
this.width = 512;
|
||||
this.height = 512;
|
||||
}
|
||||
|
||||
render() {
|
||||
log.debug(`Renderowanie canvas o wymiarach ${this.width}x${this.height}`);
|
||||
// Kod renderowania...
|
||||
log.info("Renderowanie zakończone");
|
||||
}
|
||||
|
||||
saveToServer(fileName) {
|
||||
log.info(`Zapisywanie do serwera: ${fileName}`);
|
||||
try {
|
||||
// Kod zapisywania...
|
||||
log.debug("Zapisano pomyślnie");
|
||||
return true;
|
||||
} catch (error) {
|
||||
log.error("Błąd podczas zapisywania:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Przykład użycia w Python
|
||||
|
||||
```python
|
||||
from python.logger import logger, LogLevel, debug, info, warn, error, exception
|
||||
|
||||
# Konfiguracja loggera dla modułu canvas_node
|
||||
logger.set_module_level('canvas_node', LogLevel.DEBUG)
|
||||
|
||||
# Funkcje pomocnicze dla modułu
|
||||
log_debug = lambda *args, **kwargs: debug('canvas_node', *args, **kwargs)
|
||||
log_info = lambda *args, **kwargs: info('canvas_node', *args, **kwargs)
|
||||
log_warn = lambda *args, **kwargs: warn('canvas_node', *args, **kwargs)
|
||||
log_error = lambda *args, **kwargs: error('canvas_node', *args, **kwargs)
|
||||
log_exception = lambda *args: exception('canvas_node', *args)
|
||||
|
||||
class CanvasNode:
|
||||
def __init__(self):
|
||||
log_info("Inicjalizacja CanvasNode")
|
||||
self.flow_id = "123456"
|
||||
|
||||
def process_canvas_image(self, canvas_image, trigger, output_switch, cache_enabled, input_image=None, input_mask=None):
|
||||
try:
|
||||
log_info(f"Przetwarzanie obrazu canvas - ID wykonania: {self.flow_id}, trigger: {trigger}")
|
||||
log_debug(f"Nazwa pliku canvas: {canvas_image}")
|
||||
log_debug(f"Output switch: {output_switch}, Cache enabled: {cache_enabled}")
|
||||
|
||||
# Kod przetwarzania...
|
||||
|
||||
log_info("Pomyślnie zwrócono przetworzony obraz i maskę")
|
||||
return (processed_image, processed_mask)
|
||||
except Exception as e:
|
||||
log_exception(f"Błąd w process_canvas_image: {str(e)}")
|
||||
return ()
|
||||
```
|
||||
|
||||
## Podsumowanie
|
||||
|
||||
System logowania ComfyUI-LayerForge zapewnia spójne i elastyczne rozwiązanie do debugowania i monitorowania aplikacji. Dzięki możliwości konfiguracji poziomów logowania per moduł, możesz skupić się na konkretnych częściach aplikacji bez zaśmiecania konsoli niepotrzebnymi informacjami.
|
||||
|
||||
Aby włączyć pełne debugowanie, ustaw poziom globalny na `DEBUG`:
|
||||
|
||||
```javascript
|
||||
// JavaScript
|
||||
logger.setGlobalLevel(LogLevel.DEBUG);
|
||||
```
|
||||
|
||||
```python
|
||||
# Python
|
||||
logger.set_global_level(LogLevel.DEBUG)
|
||||
# lub
|
||||
set_debug(True)
|
||||
```
|
||||
|
||||
Aby wyłączyć wszystkie logi:
|
||||
|
||||
```javascript
|
||||
// JavaScript
|
||||
logger.setEnabled(false);
|
||||
// lub
|
||||
logger.setGlobalLevel(LogLevel.NONE);
|
||||
```
|
||||
|
||||
```python
|
||||
# Python
|
||||
logger.set_global_level(LogLevel.NONE)
|
||||
Reference in New Issue
Block a user