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
GitHubIssue #11 · Project SafeSort Pierwsze wydanie
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.

Programwykonuje poleceniePodsumowanie dlaużytkownikaprint() - Podsumowaniekomendy
Programwykonuje polecenieMagazine (logging)diagnoza: copominięto, że nieodniosła sukces
Wyjście użytkownika (print)Magazine (logging)
Do których jest skierowanaDla osoby, która wywołała polecenieKogoś, kto rozumie, co się działo w środku
Co pokazujePodsumowanie poleceń – ile plików, ile ruchówDiagnostyka: brakujące pliki, błędy dostępu
FormatKrótkie, stałePoziom 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:

PoziomStosowany w SafeSort
INFOZwykłe zdarzenia: plik został przeniesiony, pominięto dowiązanie symboliczne
WARNINGCzegoś brakuje, ale program nadal działa: katalog nie jest dostępny
ERROROperacja 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.
Oficjalna dokumentacja
Logging HOWTO
LogRecord attributes