startlog i errorlog – czyli rejestrowanie i zapis błędów do pliku w Informix 4gl
W języku Informix 4gl mamy możliwość rejestrowania zdarzeń oraz błędów i zapisywania ich do plików.
Służą do tego dwie funkcje: startlog
oraz errorlog
. Pierwsza z nich służy do definiowania pliku oraz uruchamiania
logowania, druga do zapisu własnych uwag czy kroków programu. Spójrzmy na poniższy przykład:
main define log_plik char(100) LET log_plik="./log/bledy.log" CALL startlog(log_plik CLIPPED) LET log_plik="Uruchamiam program i zaczynam logowanie" CALL errorlog(log_plik CLIPPED) select 1/0 from global end main
W pierwszym kroku definiujemy zmienną log_plik, a następnie określamy nazwę pliku do którego będzie zapisywany nasz log. Poleceniem:
CALL startlog(log_plik CLIPPED)
rozpoczynamy zapis logu do pliku. W tym momencie w logu zapisze się data i godzina
uruchomienia programu, np:
Date: 21-04-2021 Time: 20:46:06
W następnym kroku przypisujemy dowolny komunikat, uwagę, może to być też krok programu do zmiennej log_plik
, której wartość następnie kierujemy do zdefiniowanego wcześniej pliku: ./log/bledy.log
.
LET log_plik="Uruchamiam program i zaczynam logowanie" CALL errorlog(log_plik CLIPPED)
W pliku log zapisze się teraz:
Uruchamiam program i zaczynam logowanie.
Następna linijka ma na celu wywołanie błędu dzielenia przez zero:
select 1/0 from global
Jednak w tym przypadku zanim dojdzie do wystąpienia błędu dzielenia przez zero program zakończy działanie innym, poniższym błędem i zapisze go do pliku. Błąd wystąpił ponieważ dla zapytania select nie zdefiniowaliśmy bazy danych.
Date: 21-04-2021 Time: 20:46:06
Program error at "errorlog.4gl", line number 15.
SQL statement error number -349.
Database not selected yet.
Poprawmy zatem nasz program i wskażmy z jakiej bazy (database) ma korzystać:
database school main define log_plik char(100) LET log_plik="./log/bledy.log" CALL startlog(log_plik CLIPPED) LET log_plik="Uruchamiam program i zaczynam logowanie" CALL errorlog(log_plik CLIPPED) select 1/0 from global end main
Po skompilowaniu i uruchomieniu tym razem program dojdzie do wykonania zapytania SQL:
select 1/0 from global
i zakończy działanie błędem:
Date: 21-04-2021 Time: 20:46:16
Program error at "errorlog.4gl", line number 15.
FORMS statement error number -1202.
An attempt was made to divide by zero.
Spójrzmy teraz jak wygląda w całości nasz plik z błędami: error.log
Date: 21-04-2021 Time: 20:46:06
Uruchamiam program i zaczynam logowanie
Date: 21-04-2021 Time: 20:46:06
Program error at "errorlog.4gl", line number 15.
SQL statement error number -349.
Database not selected yet.
Date: 21-04-2021 Time: 20:46:16
Uruchamiam program i zaczynam logowanie
Date: 21-04-2021 Time: 20:46:16
Program error at "errorlog.4gl", line number 15.
FORMS statement error number -1202.
An attempt was made to divide by zero.