Rozdział 23 · Część IV · Wdrażamy SafeSort
Dodaj log programu
Suma dla użytkownika jest drukowana bezpośrednio; Diagnostyka odbywa się osobnym kanałem – przez moduł logging.
SafeSort · Część 4 z 6Wdrożenie
Add configuration and logging
Area: CLIPriority: Low
Kod SafeSort już napotkał kilka wywołań logger.warning
(...). To nie to samo, co wyświetlanie na ekranie przez print()
: Program ma dwa różne kanały wiadomości o różnych celach.
| Wyjście użytkownika (print) | Magazine (logging) | |
|---|---|---|
| Do których jest skierowana | Dla osoby, która wywołała polecenie | Kogoś, kto rozumie, co się działo w środku |
| Co pokazuje | Podsumowanie poleceń – ile plików, ile ruchów | Diagnostyka: brakujące pliki, błędy dostępu |
| Format | Krótkie, stałe | Poziom ważności + Szczegóły |
src/safesort/cli.py
def _configure_logging() -> None:
logging.basicConfig(
level=logging.WARNING,
format="%(levelname)s:%(name)s:%(message)s",
)
SafeSort używa trzech poziomów ważności, każdy dla innej sytuacji:
| Poziom | Stosowany w SafeSort |
|---|---|
| INFO | Zwykłe zdarzenia: plik został przeniesiony, pominięto dowiązanie symboliczne |
| WARNING | Czegoś brakuje, ale program nadal działa: katalog nie jest dostępny |
| ERROR | Operacja zakończyła się niepowodzeniem: przeniesienie lub przywrócenie nieudane |
Moduł otrzymuje logger po swojej nazwie
String
logger = logging.getLogger(__name__) przechowuje nazwę modułu w LogRecord.name. Sama w sobie nie wyświetla jeszcze nazwy w terminalu: jest ona pokazana przez %(name)s w formatter. Bez niego nazwa pozostałaby w logu, ale użytkownik by jej nie zobaczył.Krótko
- Wyjście użytkownika (print)) i dziennik diagnostyczny (logging) — dwa różne kanały o różnym przeznaczeniu, nie warto ich mieszać.
- Trzy poziomy ważności — INFO, WARNING, ERROR — obejmują wszystko, co musisz SafeSort bez nadmiernej konfiguracji.
- getLogger(__name__) zapisuje imię logger; formatter od %(name)s czyni je widocznym.