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.