Logowanie i debugowanie
Logowanie
W celach diagnostycznych możemy zapisywać do pliku dziennika (logu) akcje, które podejmuje program — w razie wystąpienia błędu znacząco ułatwia to określenie jego przyczyny.
Użyjemy modułu logging
.
Musimy zacząć od utworzenie obiektu logowania:
logger = logging.getLogger(__name__)
Teraz już możemy w kodzie wywołać metodę, która spowoduje zapisanie zdarzenia w pliku dziennika:
logger.info("użytkownik %s się zalogował", user) logger.debug("suma = %s", suma) logger.warning("nie odebrano wszystkich informacji od klienta")
Wiadomości mają różne poziomy ważności; Zapisane będą tylko te, których poziom ważności jest co najmniej taki, jak graniczny poziom ustalony dla obiektu loggera.
Przykładowa konfiguracja obiektu loggera może wyglądać następująco:
logger = logging.getLogger('spr') logger.setLevel(logging.DEBUG) log_handler = logging.handlers.SysLogHandler(address = '/dev/log') formatter = logging.Formatter('%(name)s:%(levelname)s:%(pathname)s:%(funcName)s:%(lineno)s:%(message)s') log_handler.setFormatter(formatter) log_handler.setLevel(logging.DEBUG) logger.addHandler(log_handler)
Debugowanie
Do debugowania możemy użyć
standardowego modułu
pdb
lub jego rozszerzeń:
ipdb
— opartego na ipythonie oraz pudb
— wersji pełnoekranowej.
Zestaw komend pdb
i pudb
jest podobny jak w debuggerze gdb
, na przykład:
c
wznawia wykonanie programu,s
powoduje wejście do wywoływanej funkcji,n
powoduje wykonanie danej instrukcji,b
ustawienie breakpoint.
Aby wywołać debugger z poziomu kodu źródłowego,
wywołaj funkcję set_trace()
w miejscu,
gdzie działanie programu ma być przerwane.
Zadania
-
Dodaj zapisywanie zdarzeń do wybranego programu napisanego na poprzednich zajęciach.
-
Sprawdź w dokumentacji, jakie są dostępne docelowe miejsca zapisu wiadomości. Przetestuj je.
Sprawdź i przetestuj możliwość ustawiania formatu logowanych wiadomości według własnego uznania.
-
Uruchom debugger w wybranym przez siebie wcześniej napisanym programie i prześledź po kolei ciąg wywoływanych funkcji i metod.