poprzedni temat | w górę | następny temat

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 pdbpudb jest podobny jak w debuggerze gdb, na przykład:

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

  1. Dodaj zapisywanie zdarzeń do wybranego programu napisanego na poprzednich zajęciach.

  2. 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.

  3. Uruchom debugger w wybranym przez siebie wcześniej napisanym programie i prześledź po kolei ciąg wywoływanych funkcji i metod.

poprzedni temat | w górę | następny temat